web-dev-qa-db-ja.com

MacOSへのSSHは公開鍵認証を拒否します

デスクトップLinuxマシンからMacOSラップトップにsshを使用すると、公開鍵が拒否されます。パスワードを使って接続できます。

私はこれに似たいくつかの質問を見てきました(例: 52265213351 および 47175 )が、私がしなかった適切な解決策を提供するものはありませんすでに試しました。

通常、この時点で、エージェントにキーがないか、.ssh/authorized_keysファイルが正しくないことが疑われます。

Macラップトップから(ターゲット):

$ /bin/ls -ld ~/.ssh{,/authorized_keys}
drwx------  11 rik  staff   352 Oct 30 21:49 /Users/rik/.ssh
-rw-r--r--   1 rik  staff  1981 Oct 30 21:27 /Users/rik/.ssh/authorized_keys

Linuxデスクトップ(ソース)から:

$ ssh-add -L
ssh-rsa AAAAB3[...]2akN7r /Users/rik/.ssh/id_rsa
ssh-rsa AAAAB3[...]Ig+DS3 /home/rik/.ssh/id_rsa

authorized_keysをRaspberryPiにコピーし、それにsshすることができます。各マシンにssh -vvvを使用すると、さらに多くの手がかりが得られます。

ラズベリーパイへ:

...
debug1: rekey after 134217728 blocks
debug2: key: /home/rik/.ssh/id_rsa (0x55a9f8044310), agent
debug2: key: /Users/rik/.ssh/id_rsa (0x55a9f8049330), agent
debug2: key: /home/rik/.ssh/id_dsa ((nil))
debug2: key: /home/rik/.ssh/id_ecdsa ((nil))
debug2: key: /home/rik/.ssh/id_ed25519 ((nil))
debug3: send packet: type 5
debug3: receive packet: type 7
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521>
debug3: receive packet: type 6
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug3: send packet: type 50
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password
debug3: start over, passed a different list publickey,password
debug3: preferred gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/rik/.ssh/id_rsa
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 60
debug1: Server accepts key: pkalg rsa-sha2-512 blen 279
...

それが私が見たいものです(50を送信し、60を受信します)。 Macラップトップに接続するときの同じセクションは次のとおりです。

...
debug1: rekey after 134217728 blocks
debug2: key: /home/rik/.ssh/id_rsa (0x5633631f5310), agent
debug2: key: /Users/rik/.ssh/id_rsa (0x5633631f6950), agent
debug2: key: /home/rik/.ssh/id_dsa ((nil))
debug2: key: /home/rik/.ssh/id_ecdsa ((nil))
debug2: key: /home/rik/.ssh/id_ed25519 ((nil))
debug3: send packet: type 5
debug3: receive packet: type 7
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521>
debug3: receive packet: type 6
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug3: send packet: type 50
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug3: start over, passed a different list publickey,password,keyboard-interactive
debug3: preferred gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/rik/.ssh/id_rsa
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Offering RSA public key: /Users/rik/.ssh/id_rsa
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Trying private key: /home/rik/.ssh/id_dsa
...

これは、サーバーが一般にpublickeyを受け入れても、これらの特定のキーを受け入れないことを示しています。繰り返しになりますが、サーバー側の設定ミスを探しています。 MacOSでは、設定は/private/etc/sshにあります。

$ grep '^[^#]' /private/etc/ssh/sshd_config
AuthorizedKeysFile  .ssh/authorized_keys
UsePAM yes
AcceptEnv LANG LC_*
Subsystem   sftp    /usr/libexec/sftp-server

何も問題はありませんが、問題があるのか​​もしれません。

そこで次に、コンソール出力を調べて、そこに何かが表示されるかどうかを確認しました。コンソールアプリでは、sshの試行ごとに一貫して次の6行を取得します。

error   22:25:56.376189-0400    sshd    send failed: Invalid argument
error   22:25:56.376624-0400    sshd    send failed: Invalid argument
error   22:25:56.376676-0400    sshd    send failed: Invalid argument
error   22:25:56.400722-0400    kernel  Sandbox: sshd(1215) deny(1) mach-lookup com.Apple.logd
error   22:25:56.400952-0400    kernel  Sandbox: sshd(1215) deny(1) mach-lookup com.Apple.diagnosticd
error   22:25:56.689723-0400    kernel  Sandbox: com.Apple.WebKit(37255) deny(1) mach-lookup com.Apple.CoreDisplay.Notification

その中でSandboxを見て、古いバージョンのsshd_configの行に気づき、それをコピーしてsshを再起動しました。

この線:

UsePrivilegeSeparation sandbox      # Default for new installations.

Sshを再起動するには:

# launchctl stop com.openssh.sshd
# launchctl start com.openssh.sshd

これは効果がなかったので、構成の変更を元に戻しました。それに関連する検索が私を導きました ここ 。 「設定|セキュリティとプライバシー|プライバシー|フルディスクアクセス| sshd-keygen-wrapper」がチェックされていることを確認しました。

最近、ラップトップでCatalinaにアップグレードしました。私はかなり長い間sshを使用して接続していませんが、過去に機能していたことは知っています。

Catalinaは、受け入れる公開鍵の種類についてより制限的になっているのではないかと考えました。そこで、新しいキーを別のファイルに生成し、公開キーをauthorized_keysに追加し、そのキーをエージェントに追加し、エージェントが新しいキーを持っていることを確認して、再試行しました。キータイプに対するより大きな制限が原因である場合、彼らはssh-keygenデフォルトを一致するようにアップグレードするのを忘れました。 (しかし、私はAppleはそのようなことをしないだろうと言うつもりはありません。)

publickey認証を再び機能させる方法を理解するのに迷っています。任意の提案を歓迎します。

2
Rik Renich

私を正しい方向に導いてくれたSpiffに感謝します。問題は、.sshサブディレクトリではなく、ホームディレクトリのアクセス許可でした。

[設定] | [共有] | [リモートログイン]のチェックを外して、sshdを一時的に無効にしました。次に、/usr/sbin/sshd -dを実行して、詳細な出力を取得しました。この行が含まれています:

Authentication refused: bad ownership or modes for directory /Users/rik

そこで、権限を755に変更すると、機能するようになりました。

Spiffに改めて感謝します。

2
Rik Renich

典型的なMacのトラブルシューティング手法...リモート管理を有効または無効にしましたか? VNC(SSHトンネルと大まかに関連付けられている)では解決できない同様の問題があります。 VNCパスワードは接続を許可しませんが、ユーザー名とパスワードを使用すると接続が許可されます。

また、これはセキュリティ上の制限があるのではないかと思います。

0
user711393