SSH - 使用密钥有效,但不是在脚本中

SSH - 使用密钥有效,但不是在脚本中

我有点困惑,我在两台服务器之间设置了公钥,效果很好,但只有当我从终端手动 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 身份运行,而您的测试是以您的用户身份进行的。您使用的susudo还是以 root 身份登录?您的脚本是如何启动的?它是否具有 root 权限?

相关内容