我有点困惑,我在两台服务器之间设置了公钥,效果很好,但只有当我从终端手动 ssh 时它才有效。当我将 ssh 命令放入 python 脚本时,它会要求我输入密码才能登录。该脚本使用 rsync 将目录从一台服务器同步到另一台服务器。
有效的手动 ssh 命令,无需密码提示,自动登录:
ssh -p 1234 [email protected]
在 Python 脚本中:
rsync --ignore-existing --delete --stats --progress -rp -e "ssh -p 1234" [email protected]:/directory/ /other/directory/
是什么赋予了?
(显然,ssh 详细信息是假的)
根据请求编辑
@Zoredache - 我输入-vv
了脚本(以及 -i 来指定密钥的位置,这实际上让我更接近了一步)并且它显示了一组有趣的行:
debug1: Host '[123.456.789.123]:1234' is known and matches the RSA host key.
debug1: Found key in /root/.ssh/known_hosts:1
debug2: bits set: 515/1024
debug1: ssh_rsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/garfonzo/.ssh/id_dsa.pub (0x7f125c489bd0)
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/garfonzo/.ssh/id_dsa.pub
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-dss blen 434
debug2: input_userauth_pk_ok: fp 81:02:20:f0:62:16:30:15:4d:0b:2e:91:7c:ba:5c:05
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
Enter passphrase for key '/home/garfonzo/.ssh/id_dsa.pub':
debug2: no passphrase given, try next key
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
看起来,它并不知道我的密钥存储在客户端的哪里(可能是之前的问题),而是要求输入密码。问题是我没有指定密码,我把它留空了。奇怪...也许我应该创建一组新密钥?
编辑2
@ckliborn - 好主意!我想这可能表明了我的问题所在。我认为指出我的问题的一行是:
debug1: Found key in /home/garfonzo/.ssh/known_hosts:1
而通过脚本运行时,同一行是:
debug1: Found key in /root/.ssh/known_hosts:1
因此,客户端在错误的位置寻找密钥。当我指定密钥位置时,它会要求输入密码,但我尚未设置。哎呀!
?使困惑?
答案1
在 python 脚本中,您是否尝试过使用“-i”标志明确给出想要使用的标识文件的位置?
前任:
rsync --ignore-existing --delete --stats --progress -rp -e "ssh -i /home/user/.ssh/keyfile -p 1234"[电子邮件保护]
答案2
尝试向您的 ~/.ssh/config 文件添加新主机,并确保进行修改:
Host somehostname
Hostname 169.1.1.254
User garfonzo
IdentityFile /home/garfonzo/.ssh/id_rsa
PubkeyAuthentication yes
答案3
如果您的密钥有密码(应该有),您需要获取 ~/ssh-agent。
http://www.ibm.com/developerworks/library/l-keyc2/
如果您省略了密钥的密码,请按照上述建议并传入“-i”参数。
答案4
检查您的用户... 该脚本似乎以 root 身份运行,而您的测试是以您的用户身份进行的。您使用的su
是sudo
还是以 root 身份登录?您的脚本是如何启动的?它是否具有 root 权限?