Linux

SSH 密鑰身份驗證不斷要求輸入密碼

  • March 12, 2021

我正在嘗試使用 SSH 密鑰設置從 ServerA(SunOS)到 ServerB(一些帶有鍵盤互動式登錄的自定義 Linux)的訪問權限。作為概念證明,我能夠在 2 個虛擬機之間進行。現在在我的現實生活場景中它不起作用。

我在 ServerA 中創建了密鑰,將它們複製到 ServerB,chmod’d .ssh 文件夾到 ServerA、B 上的 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 行中的第一個字元,這將防止在第一個和第一個字元之間添加一個“新行”鍵的第二行。重複 3d 線。

我認為您的密鑰沒有被正確複製,如果您有ssh-copy-id可用的,我建議您使用它。

$ ssh-copy-id user@remote_server
Password:

輸入密碼後,您的 SSH 密鑰將被複製,您應該可以直接 ssh 而不再次提供密碼。

還要檢查您在ServerB上的 SSH 配置並檢查幾件事。

$ vi /etc/ssh/sshd_config

另一件事是檢查這些設置:

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

AuthorizedKeysFile的值是您需要粘貼公共 ssh 密鑰的位置。

您可以使用以下方法收集您的 SSH-Key 資訊:ssh-add -L

更新

ssh-copy-id不存在時,您可以使用舊方法:

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

引用自:https://serverfault.com/questions/396935