我有一个非常简单的PHP脚本,试图从CENTOS 7盒连接到SFTP服务器。通过作曲家使用phpseclib。
<?php
require('vendor/autoload.php');
$usr = 'xx';
$pwd = 'xx';
$host = 'sftp.domain.com.au';
$sftp = new SFTP($host);
if($sftp->login($usr, $pwd)){
echo "Connected.";
}else {
echo "Failed";
}
?>
甚至使用了RSA密钥
<?php
require('vendor/autoload.php');
$usr = 'xx';
$pwd = 'xx';
$host = 'sftp.domain.com.au';
$sftp = new SFTP($host);
$rsa = new RSA();
$rsa->loadKey(file_get_contents("../../.ssh/id_rsa"));
if($sftp->login($usr, $pwd, $rsa)){
echo "Connected.";
}else {
echo "Failed";
}
?>
上面使用RSA编写的脚本实际上确实工作了几次,并且使我联系起来。因此,我认为我需要了解它的工作原理,并进行一些更改。我尝试生成另一个覆盖现有密钥的密钥。但是这次它不再起作用了。
我还打开了NET_SFTP_LOGGING,没有任何显示错误,只是一个简单的“服务器关闭了连接”。我已经为此工作了好几天。
我唯一能想到的是当我重新生成密钥并以某种方式覆盖ID_RSA时,也许服务器认为它不再是正确的密钥了?
另外,当我使用WinSCP进行连接时,似乎FTP服务器正在提供一种算法:ssh-rsa 4096,sha256和md5代码。这是我需要在PHP脚本中使用以正确连接的东西吗?只是试图排除任何可能性。
更多详细信息:
请任何人给我们一些建议,因为这会消耗我几天的时间,希望不会持续数周!预先感谢。
答案 0 :(得分:1)
根据您的代码:
$rsa->loadKey("../../.ssh/id_rsa");
尝试一下:
$rsa->loadKey(file_get_contents("../../.ssh/id_rsa"));
还
if($sftp->login($usr, $pwd, $rsa)){
您实际上要使用多因素身份验证吗?以我的经验,执行此操作的SSH服务器设置很少。似乎更有可能是您具有受密码保护的RSA私钥,此时您将执行以下操作:
$rsa->setPassword($pwd);
$rsa->loadKey(file_get_contents("../../.ssh/id_rsa"));