Quantumleap
503 words
3 minutes
突然SSHが繋がらなくなっちゃった話
2023-11-18

背景#

SSH が繋がらなくなっちゃった。

Linode で契約しているサーバーに、root とは異なるアカウント(tkgling)を作成しそのアカウントにログインを試みる。

[email protected]: Permission denied (publickey,password).

まず、パスワード認証はしていないと勘違いしていたので password と表示されるのが不可解。

config#

~/.ssh/configは以下の通り。

Host LanPlay
  HostName xxx.xxx.xxx.xxx
  User tkgling

Host *
  UseKeychain yes
  AddKeysToAgent yes
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/id_ed25519

ログインできない理由#

Linode はインスタンス作成時に何故か root でかつパスワードログインができる、かつ公開鍵認証が無効化されているという謎仕様になっている。

なのでHost *に対してPreferredAuthentications publickeyの設定が有効化されていると詰んでしまうというわけです。

公開鍵認証が無効化されているのは意味がわからないので、パスワード認証を無効化した上で公開鍵認証を有効化しましょう。

認証方式#

うちの環境では作成する鍵は全てid_ed25519なので以下のコマンドをホストマシンから入力する。よくわかっていないが、指定された公開鍵を指定されたサーバーにログインして登録するコマンドっぽい。

ssh-copy-id -i ~/.ssh/id_ed25519 [email protected]

するとパスワード入力後に鍵が登録される。

できたらsudoedit /etc/ssh/sshd_configで SSH 接続設定を変更します。変更しないと脆弱なままなので注意。

PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no

のように変更をかければパスワード認証がオフになります。

systemctl restart sshdで設定を反映させましょう。

macOSの場合はsudo launchctl kickstart -k system/com.openssh.sshdでいけます

Linode で仮想マシンを作ったらまずやることのように StackScripts を作成してしまっても良いです。

sudo apt install sshguardを入れておくとログイン試行してくる人を BAN できるのでより安全になります。

記事は以上。

突然SSHが繋がらなくなっちゃった話
https://fuwari.vercel.app/posts/2023/11/ssh/
Author
tkgling
Published at
2023-11-18