Macを開発用に色々チューニングしているのですが、開発用サーバにSSHする際に色々とエラーが起きたので対応したお話です。
単純に言えば、サーバ側のSSHの鍵交換プロトコルとかが古すぎて、クライアント側のデフォルトの設定だとはじかれてしまうことが問題だったのですが、とりあえず備忘として。
- 出力エラー内容
- no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
- Unable to negotiate with hogehoge.com port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
- sign_and_send_pubkey: no mutual signature supported user@hogehoge.com: Permission denied (publickey,gssapi-with-mic).
- It is required that your private key files are NOT accessible by others.This private key will be ignored.Load key “ssh/user.key”: bad permissionsuser@hogehoge.com: Permission denied (publickey,gssapi-with-mic).
出力エラー内容
no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
内容
ChatGPTに聞いてみたところ、
このエラーメッセージは、SSH(Secure Shell)接続の際にキーマッチングエラーが発生していることを示しています。エラーメッセージによれば、相手方は以下の鍵交換方法を提案しています:diffie-hellman-group-exchange-sha1、diffie-hellman-group14-sha1、diffie-hellman-group1-sha1。これらの鍵交換方法は、セキュリティ上の問題があるため、通常は推奨されません。
とのこと。
「セキュリティ上の問題があるため、通常は推奨されません。」が引っかかりますが、諸事情でサーバ側のSSHの設定をいじることはできないので、クライアント側で対応。
解決方法
sshのオプションで鍵交換方法の指定をすることができます。
(例)
ssh hogehoge.com -oKexAlgorithms=diffie-hellman-group-exchange-sha1
ちなみに、サーバ側がどの鍵交換方式を使おうとしているかを確認するには、ssh -v オプションを使用します。
ssh hogehoge.com -v
出力
debug1: kex: host key algorithm: diffie-hellman-group-exchange-sha1
こんな感じ。
Unable to negotiate with hogehoge.com port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
内容
SSH接続の際にHost Keyタイプの不一致が発生している場合に出力されるエラーです。
このメッセージが出ている場合、サーバ側からはssh-rsa,ssh-dssが要求されています。
解決方法
sshのコンフィグに設定を入れればOKです。
今回はhogehoge.comにsshする場合に設定を反映したいので、以下のような設定になります。
ちなみに、sshのコンフィグはデフォルトだと~/.ssh/config になるはず。
Host hogehoge.com HostKeyAlgorithms ssh-rsa,ssh-dss
これでssh-rsa,ssh-dssを使えるようになります。
sign_and_send_pubkey: no mutual signature supported user@hogehoge.com: Permission denied (publickey,gssapi-with-mic).
内容
ChatGPTさん曰く
このエラーメッセージは、SSHクライアントとサーバーが相互にサポートする署名アルゴリズムが見つからない場合に表示されます。通常、公開鍵認証において、クライアントとサーバーは共通の署名アルゴリズムを使用する必要があります。
とのこと。
あれ、↑で設定したじゃん、と思ったんですが、なんでか使ってくれませんでした。
おそらくですが設定したユーザーとログインしようとしているユーザー(今回はuserというユーザ)が異なっているからだと思われます。
その場合はオプションで指定してあげることができます。
解決方法
sshコマンドにて以下のオプションを付けると解決
ssh -o PubkeyAcceptedKeyTypes=ssh-rsa,ssh-dss user@hogehoge.com
It is required that your private key files are NOT accessible by others.This private key will be ignored.Load key “ssh/user.key”: bad permissionsuser@hogehoge.com: Permission denied (publickey,gssapi-with-mic).
内容
これは鍵認証ログインで秘密鍵を指定した際に発生したエラー。
秘密鍵の権限が良くないですって怒られています。
基本的に、秘密鍵のパーミッションは600にしておかないといけないため、以下のコマンドで権限を変更します。
解決方法
単純にchmodするだけ。
chmod 600 ssh/user.key
コメント