背景
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 できるのでより安全になります。
記事は以上。