我正在尝试制作一个在终端上运行的php脚本,它将通过ssh连接到远程服务器并检索文件.到目前为止这是我的代码
#!/usr/bin/php -q 'ssh-rsa')); $methods = ssh2_auth_pubkey_file($connection, 'remoteuser', $cwd.'ssh/id_rsa.pub', $cwd.'ssh/id_rsa', "it's an inception"); var_dump($methods); //ssh2_scp_recv($connection, "/remote/server/path/to/$filename", $cwd.$filename); ?>
现在我遇到了这个ssh2_auth_pubkey_file()
函数的问题,当我运行脚本时它会返回:
PHP Warning: ssh2_auth_pubkey_file(): Authentication failed for remoteuser using public key in /home/tonyl/Projects/get-file-ssh.php on line 10 bool(false)
密钥文件具有权限-rw-r--r--
(644).此外,公钥已添加到remoteuser的授权密钥中.我能正常使用ssh命令ssh,所以我不认为这是一个ssh授权问题,但是谁知道.我是ssh和ssh2 php库的新手.
ssh2_auth_password()
如果我在远程sshd_config文件中启用它,我可以使用它连接,但我不想这样做,因为它减少了安全性传输.
关于我能做什么的任何想法.
这是php中的已知错误:密码保护的私钥不能用于某些组合.
请参阅:https://bugs.php.net/bug.php?id = 58573
当公钥文件受密码保护时,ssh2_auth_pubkey_file()被破坏而libssh2是用libgcrypt编译的,这是debian/ubuntu和其他人所做的.我正在研究这个bug的解决方案,但是如果你需要这个工作,请用OpenSSL自己重建libssh2.
解决方法可能是存储未加密的私钥.要解密密钥:
openssl rsa -in id_rsa -out id_rsaNOPASSWORD
然后使用文件id_rsaNOPASSWORD而不提供第五个参数'passphrase'.它可以工作,但你必须小心你的解密密钥文件.无论如何,安全级别并没有真正受到严重影响,因为即使使用加密密钥,您仍然需要将未加密的密码传递给ssh2_auth_pubkey_file函数...
希望能帮助到你.