我尝试使用 SSH 密钥设置从 ServerA(SunOS)到 ServerB(某些具有键盘交互式登录的自定义 Linux)的访问权限。作为概念验证,我能够在 2 台虚拟机之间执行此操作。但现在在我的实际场景中它不起作用。
我在 ServerA 中创建了密钥,将它们复制到 ServerB,并在 ServerA 和 B 上将 .ssh 文件夹的 chmod 设置为 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 个字符),然后自己输入第 1 行中缺少的字符和第 2 行中的第一个字符,这样可以避免在密钥的第一行和第二行之间添加“新行”。对第 3 行重复此操作。
答案1
我认为您的密钥没有被正确复制,如果您有的ssh-copy-id
话我建议您使用它。
$ ssh-copy-id user@remote_server
Password:
输入密码后,您的 SSH 密钥将被复制,您无需再次提供密码即可进行 ssh。
还要检查你的 SSH 配置服务器B并检查一些事情。
$ vi /etc/ssh/sshd_config
另一件事是检查这些设置:
RSAAuthentication yes
PubKeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
的价值授权密钥文件是您需要粘贴公共 ssh 密钥的地方。
您可以使用以下方式收集 SSH-Key 信息:ssh-add -L
更新
当ssh-copy-id
不存在时你可以按照老方法做:
$ cat ~/.ssh/id_rsa.pub | ssh user@remote_host 'cat >> /home/user/.ssh/authorized_keys'
答案2
您应该使用以下命令检查远程计算机上文件的权限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 /home/vmirea/.ssh
答案3
您的调试日志显示服务器不接受您的任何私钥 RSA。您应该指定特定的正确密钥文件或检查服务器是否具有正确的公钥文件。
正如@Fredrik所说,文件权限也可以发挥作用。SSH将拒绝使用其他人可以写入的公钥条目和其他人可以读取的私钥条目。
答案4
基于以上情况,我无法判断问题是什么。但是,我遇到这种情况的大多数时候都是因为密钥的权限设置得太可读(即组或其他用户可读,而不仅仅是用户)。这就是我开始寻找的地方。