環境
サーバー側
- CentOS release 6.9 (Final)
- OpenSSL 1.0.1e-fips 11 Feb 2013
古っ。
クライアント側
- macOS 15「Sequoia(セコイア)」
- terminal.app
事象
sshアクセスを試みたら以下のエラーMSGを出力し、接続できない。
Unable to negotiate with サーバーアドレス port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
原因
SSHクライアントとサーバー間で使用可能な鍵アルゴリズムが一致しないため。
ざっくりいうと、サーバー側のSSHが古いんすな。
対処
クライアント側
ssh -oHostKeyAlgorithms=+ssh-rsa ユーザー@サーバー
で接続する。(パスワード方式の場合)
~/.ssh/configに書く場合は以下の感じ。
Host 任意のサーバーの名前(sshコマンドのオプションで指定する名前)
HostKeyAlgorithms +ssh-rsa
しかしこれはセキュリティ的に非推奨。サーバー側が古くてセキュリティ的に危険なので。
サーバー側
必要に応じて以下の対処をする。
- OSがサポート切れの場合、最新化する
- OpenSSHをバージョンアップして脆弱性が無い新しいバージョンにする
- 新しいキーベアを作成する(以下全て未検証。AIに聞いたょ。)
- sudo ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -N “”
- /etc/ssh/sshd_config に以下の行を追加
- HostKey /etc/ssh/ssh_host_rsa_key
- sshd再起動
- sudo systemctl restart sshd
- CentOS5.3の場合ecdsaがサポートされています。以下のコマンドでECDSAキーを生成します。
- ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N “”
- /etc/ssh/sshd_configに以下の行を追加します。
- HostKey /etc/ssh/ssh_host_ecdsa_key
- SSH再起動
- sudo systemctl restart sshd
sshdの設定をいじる場合は万が一sshが繋がらなくなってしまっても対処可能な状況で実行すること。
→sshが繋がらなくなっても、アタシ、責任取れないんだからね!
コメント