訳あって、Ubuntu Serverをテスト用にインストールしました。
で、当然、公開鍵認証の設定をするのですが、引っかかってしまったので作業メモを残します。
(ホスト名やユーザー名は実際のものから置き換えてあります)
以下の手順で鍵ペアを生成します。
~$ cd .ssh ~/.ssh$ ssh-keygen -f server.example.com Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in server.example.com Your public key has been saved in server.example.com.pub The key fingerprint is: SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx user@client The key's randomart image is: +---[RSA 3072]----+ | .Eo | | . o | |. o . . . | | * ..o . + . | |..=...= S . | |...=.+ X | |...o+.B B | |+o+o+..B | |**+oo=. | +----[SHA256]-----+ ~/.ssh$
公開鍵をサーバ(server.example.com)に転送します。
~/.ssh$ ssh-copy-id -i server.example.com.pub evash@example.server.com : : Received disconnect from server.example.com port 22:2: Too many authentication failures Disconnected from example.server.com port 22 ~/.ssh$
ということで、「Too many authentication failures」というエラーメッセージで阻まれてしまいました。調べてみると、これは相手側で公開鍵認証が有効になっていないときに出るようです。
~/.ssh$ ssh-copy-id -i server.example.com.pub user@server.example.com -o PreferredAuthentications=password
ということで、オプションとして、「-o PreferredAuthentications=password」を付けて、パスワード認証を強制するとよいようです。
ssh-copy-idを実行後、試しに
~/.ssh$ ssh user@server.example.com -i server.example.com
とすると、公開鍵認証でログインできました・・・?
普通は、「-o PreferredAuthentications=password」無しでも、パスワード認証にフォールバックするような気がするのですが・・・?
.ssh/config に以下を書き足します。
Host server server.example.com HostName server.example.com User user IdentityFile ~/.ssh/server.example.com IdentitiesOnly yes ServerAliveInterval 60
書き足したら、 /etc/ssh/sshd_config の
PasswordAuthentication yes
の行を no に書き換えて、ついでに、ポート転送をするのと、rootログイン禁止をしたいので、
GatewayPorts yes PermitRootLogin no
を書き足して、
$ sudo systemctl restart ssh
としてパスワード認証を無効化しておきます。