サーバーに ssh キーを設定して、毎回パスワードを入力する手間を省こうと思った。しかし、どうやら…… サーバーには独自の考えがあるようだ。
奇妙なバグと奇妙な修正方法を記録する。
操作#
サーバーのユーザーディレクトリ内の .ssh
フォルダーで ssh-keygen -t rsa
を実行してキーを生成する。
その後、プライベートキーをローカルの Windows マシンにダウンロードする。mobaxterm を通じて ssh キーでログインする。
ここまでは順調だった。ログインの瞬間まで。
Server refused our key!
キーが拒否され、パスワードを入力しなければならない。
試み#
思考 1: /etc/ssh/sshd_config
で StrictMode
を無効にする設定をする。しかし、サーバーは複数人で使用しているため、あまり理解しておらず、権限の問題を引き起こす可能性があるため、この方法は考慮しない。
思考 2: StrictMode
の要件を満たすように権限設定を調整する。 リモート接続サーバー Server refused our key | CSDN ブログ
思考 3: Openssh
のバージョンの問題により、 RSA
暗号化アルゴリズムがサポートされていない。 sshd_config
ファイルで RSA
をサポートするように設定する mobaxterm で Server refused our key の問題 | CSDN ブログ または他の暗号化アルゴリズムを使用する Ed25519 アルゴリズムで SSH キーを生成する | 知乎
思考 4:詳細なログを有効にして問題を特定する。ssh キー設定後に Server refused our key と表示される | CSDN ブログ
最初の 3 つの思考では問題が解決しなかったが、4 つ目の思考は私により多くのヒントを与えてくれた。重要なエラーメッセージは:
mm_answer_keyallowed: publickey authentication test: RSA key is not allowed
キーが互換性がないと言う人もいれば、 Win32
の制限だと言う人もいて、混乱してしまった。
解決#
この記事は私に少しのヒントを与えてくれた Can't set up SSH key (PuTTY to Ubuntu Server) | StackExchange この記事では、生成されたキーの形式が正しくない可能性があると言われている。
私の試みは偶然にも成功した —— 私は Linux サーバー上でキーを生成するのではなく、ローカルの Windows システムで再生成し、それをサーバーにアップロードしたところ、問題は奇妙に解決した!
更新#
最近、システムを再インストールしたため、再度 ssh ログインを設定した。
システムバージョン: Ubuntu 22.04.1 LTS
設定ファイルを変更 /etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
元々コメントアウトされていた #
を削除する。
キーを生成
ssh-keygen -t ed25519 -f your_ssh_key_ed25519 -C "your_ssh_key_name"
.ssh
フォルダーの権限を 700 に設定
プライベートキーのファイル権限を 600 に設定し、パブリックキーのファイルは 644 の権限を開放する。キーの安全性には影響しない。
authorized_keys
ファイルの権限を 600 に設定する。 authorized_keys
ファイルがない場合は、touch コマンドで作成する。
chmod 700 .ssh
chmod 600 .ssh/your_private_key
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
パブリックキーをauthorized_keys
ファイルにコピー
cd .ssh
cat your_public_key >> authorized_keys
注意:public key は通常
.pub
拡張子の付いたファイルです。
テストの結果、ログインできるようになった。