SSH密钥身份validation不断要求input密码

我试图设置访问从ServerA(SunOS)到ServerB(一些自定义Linux键盘交互login)与SSH密钥。 作为概念certificate,我能够在两台虚拟机之间做到这一点。 现在在我的现实生活中,它并不奏效。

我在ServerA中创build密钥,将它们复制到ServerB,在两个ServerA,B上将chmod'd.ssh文件夹复制到700。

这是我得到的日志。

debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: server->client aes128-ctr hmac-md5 none debug1: kex: client->server aes128-ctr hmac-md5 none debug1: Peer sent proposed langtags, ctos: debug1: Peer sent proposed langtags, stoc: debug1: We proposed langtags, ctos: en-US debug1: We proposed langtags, stoc: en-US debug1: SSH2_MSG_KEX_DH_GEX_REQUEST sent debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP debug1: dh_gen_key: priv key bits set: 125/256 debug1: bits set: 1039/2048 debug1: SSH2_MSG_KEX_DH_GEX_INIT sent debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY debug1: Host 'XXX.XXX.XXX.XXX' is known and matches the RSA host key. debug1: Found key in /XXX/.ssh/known_hosts:1 debug1: bits set: 1061/2048 debug1: ssh_rsa_verify: signature correct debug1: newkeys: mode 1 debug1: set_newkeys: setting new keys for 'out' mode debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug1: newkeys: mode 0 debug1: set_newkeys: setting new keys for 'in' mode debug1: SSH2_MSG_NEWKEYS received debug1: done: ssh_kex2. debug1: send SSH2_MSG_SERVICE_REQUEST debug1: got SSH2_MSG_SERVICE_ACCEPT debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Next authentication method: publickey debug1: Trying private key: /XXXX/.ssh/identity debug1: Trying public key: /xxx/.ssh/id_rsa debug1: Authentications that can continue: publickey,keyboard-interactive debug1: Trying private key: /xxx/.ssh/id_dsa debug1: Next authentication method: keyboard-interactive Password: Password: 

ServerB具有相当有限的动作,因为它是一个自定义的专有Linux。

会发生什么?

编辑答案:

问题是我没有在sshd_config中启用这些设置(请参阅接受的答案),并且从ServerA粘贴到ServerB的密钥时,会将密钥解释为3个单独的行。

我所做的是,如果你不能像我不能使用ssh-copy-id。 将你的密钥的第一行粘贴到你的“ServerB”authorized_keys文件中,而不是最后2个字符,然后input第一行中的缺失字符和第二行中的第一个字符,这将防止在第一行和第二行之间添加“新行”第二行的关键。 重复三维线。

我不认为你的密钥已被正确复制,如果你有ssh-copy-id可用,我会build议你使用它。

 $ ssh-copy-id user@remote_server Password: 

一旦你input密码,你的SSH密钥将被复制,你应该能够只是ssh而不再提供密码。

同时检查你的SSH服务器上的configuration,并检查一些事情。

 $ vi /etc/ssh/sshd_config 

另一件事是检查这些设置:

 RSAAuthentication yes PubKeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys 

AuthorizedKeysFile的价值是你需要粘贴你的公共ssh密钥的地方。

您可以使用以下命令来收集您的SSH密钥信息: ssh-add -L

更新

ssh-copy-id不存在时,可以按照以前的方式进行:

 $ cat ~/.ssh/id_rsa.pub | ssh user@remote_host 'cat >> /home/user/.ssh/authorized_keys' 

基于上述,我不能说是什么问题。 然而,大多数时候我遇到过这个问题,原因是这些密钥的权限设置得太可读了(比如对于组或者其他人而言,不仅仅是用户)。 那就是我开始寻找的地方。

您的debugging日志显示服务器不接受您的任何私人RSA密钥。 您应该指定特定的正确密钥文件或检查服务器是否有正确的公钥文件。

正如@Fredrik所说,对文件的权限也可以发挥作用。 SSH将拒绝使用其他人可以写入的公钥项和其他人可以读取的私钥项。

设置密钥最简单的方法是运行

 ssh-copy-id <remotehost> 

在将要连接的机器上(例如您的工作站)

它应该询问您的密码,然后复制您的密钥并适当地设置权限。

这些问题(通常是与权限相关的)从服务器端更容易debugging。 我build议你在debugging模式下启动另一个sshd: /usr/sbin/sshd -d -p 2222将在端口2222上启动另一个sshd,然后在客户端运行ssh -p 2222 user@sshserver 。 当您的客户端尝试进行身份validation时,请注意sshd的内容。

权限问题不一定只是/home/$USER/.ssh 。 这也可能是//home/home/$USER 。 如果其中任何一组是可写的,则可能是一个问题。

另一个常见的问题是,你错误地粘贴并在你的密钥的authorized_keys文件中间插入换行符

您应该使用ls -l ~/.ssh来检查远程机器上的文件权限,并设置权限:
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/<private_key>例如: chmod 600 ~/.ssh/id_rsa
chmod 700 ~/.ssh/<public_key>例如: chmod 700 ~/.ssh/id_rsa.pub chmod 700 ~/.ssh/<public_key> chmod 700 ~/.ssh/id_rsa.pub
chmod 700 /home/vmirea/.ssh