我一直试图使用perl连接到sftp服务器,我尝试过使用几个模块和puTTy,但没有成功。
use Net::SFTP::Foreign;
use Net::SFTP::Foreign::Backend::Net_SSH2;
use Net::SSH2;
my ($host) = 'xxx.xxxx.xxx';
my ($user) = "user";
my ($pass) = "password";
my $ppk_filepath = 'private_file.ppk'
my $ssh2 = Net::SSH2->
我使用以下代码创建了一个ssh连接。
$connection = ssh2_connect($masterIp, 22);
// authenticating the remote server connection with credentials
ssh2_auth_password($connection, $user, $password);
// secure ftp connection to create directory if not exist
$sftp = ssh2_sftp($connection);
完成操作后,我需要关闭
-原始消息-
我需要访问SFTP服务器,但是PHP服务器并没有直接连接到internet。我认为通过SSH隧道连接。
AppServer → AdminServer → SFTP
My PHP Server → SSH connection through server → An external SFTP server
但我不明白如何为SFTP 帐户设置身份验证。
我的代码:
<?php
$connection = ssh2_connect("172.16.0.2", 22); // Admi
TDLR:我有一个Catch 22,根据用户主目录上的权限,我可以让SSH身份验证或用户目录约束工作,但不能两者兼得。
顺便说一句,我真的很想上我自己的SFTP服务器。请不要建议我尝试AWS转乘服务或其他选择。谢谢。
以下是/etc/ssh/sshd_config中的相关内容(与默认内容不同):
Subsystem sftp internal-sftp
Port 22
Port 2299
Match Group sftpusers LocalPort 2299
ChrootDirectory /sftp-data/%u
ForceCommand internal-sftp
Match
我在远程sftp上有一组文件,每天都需要下载到服务器上。sftp使用ssh密钥进行身份验证,因此我创建了ssh密钥并将其添加到远程服务器授权文件夹中。我能够成功地手动执行ssh/sftp。我已经创建了一个脚本,它首先执行eval ssh-agent -s,然后执行ssh-add。当手动运行时,我们会得到密码提示,scp可以正常工作。
eval `ssh-agent -s`;
ssh-add;
#copy from remote to local
当我将这个crontab添加到每天运行时,我需要一些建议/最佳实践来避免输入密码。
我正在实现一个SFTP服务器,使用作为参考。推出我自己的解决方案的原因是自定义身份验证方案和特殊的chrooting和黑白名单标准。
我现在的问题是一次处理多个连接。我的当前循环如下所示:
# Wait for a connection
conn, addr = server_socket.accept()
# Open a transport for this connection
tr = Transport(conn)
# Load our private host key
key = RSAKey.from_private_key_file("sftp.key")