パスワード無しでsshするための設定

複数台のサーバにLinuxをインストールしたときに、サーバ間でsshするときにいちいちパスワード入力するのが面倒なので、パスワード入力を省略するための設定方法をメモしておきます。

鍵ペアを作成する

ssh-keygenコマンドで秘密鍵と公開鍵の鍵ペアを作成します。暗号化の方式にはRSAを指定して下さい。

[testu1@base0 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/testu1/.ssh/id_rsa): (リターンだけ入力する)
Created directory '/home/test/testu1/.ssh'.
Enter passphrase (empty for no passphrase): (リターンだけ入力する)
Enter same passphrase again: (リターンだけ入力する)
Your identification has been saved in /home/test/testu1/.ssh/id_rsa
Your public key has been saved in /home/test/testu1/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:LBFGmitvctbTPE82gyYAvgHNcIjtoY/bP2TCjPlMUvA testu1@base0
The key's randomart image is:
+---[RSA 3072]----+
|oo. .+ |
|+=o + . |
|.=+.o . |
|.oE. . o |
| O+ o . S |
|= *=oo + . |
| Bo+= + * = |
|. +=. + = o |
| … . |
+----[SHA256]-----+

このコマンドを実行すると、3箇所入力を求められるところがあります。1つ目は鍵の保管場所ですが、デフォルト($HOME/.ssh)のままで良いので、そのままリターンを入力します。2つ目と3つ目は、秘密鍵を読み出すためのパスワードなのですが、今回はパスワードを入力するのを省略するのが目的なので、ここもそのままリターンを入力します(すなわちパスワード無し)。

鍵の長さは、デフォルトでは2048bitが選択されます。更に厳しい条件にしたいのであれば、4096bit等を指定して鍵を作成して下さい。

[testu1@base0 ~]$ ssh-keygen -t rsa -b 4096

ssh-keygenコマンドを実行すると、ホームディレクトリの下に .ssh ディレクトリが作成されて、秘密鍵 id_rsa と公開鍵 id_rsa.pub が作成されます。

[testu1@base0 ~]$ ls -al .ssh
total 8
drwx------ 2 testu1 testg 38 Mar 30 09:58 .
drwx------ 5 testu1 testg 118 Mar 30 09:58 ..
-rw------- 1 testu1 testg 2602 Mar 30 09:58 id_rsa
-rw-r--r-- 1 testu1 testg 566 Mar 30 09:58 id_rsa.pub

公開鍵をリモートホストのauthrized_keysにコピーする

例えば、ローカルホスト base0 から リモートホスト ood0 にsshする際に、パスワード無しでログインしたいとします。この場合は、リモートホストood0の $HOME/.ssh/authorized_keys というファイルに、ローカルホスト base0 で作成した公開鍵を登録します。正確な表現で説明すると、パスワード無しで秘密鍵を作成しているので、公開鍵認証でsshログインする際にパスワードが求められない、ということです。

リモートホストood0に、$HOME/.ssh/authorized_keys ファイルが存在しなければ、ローカルホストbase0の公開鍵 id_rsa.pubをコピーすればOKです。既に存在している場合は、

cat id_rsa.pub >> ~/.ssh/authorized_keys

のようにして、ファイルの末尾に追加して下さい。
また、ローカルホスト側からの公開鍵転送とリモートホストのauthorized_keysへの追加を同時に行いたい場合は、以下ローカルホスト側で以下のコマンドを実行してもOKです(この例のユーザ名はtestu1, リモートホストood0のIPアドレスは 192.168.1.204 です)。

[testu1@base0 ~]$ ssh-copy-id -i .ssh/id_rsa.pub testu1@192.168.1.204

フィンガープリントの登録を省略したい

パスワード無しでsshログインできるようになっても、初回のログインで、フィンガープリントを登録しても良いかどうか(yes/no)の入力を求められるのは面倒です。また、リモートホストの $HOME/.ssh/known_hosts に一度登録されると、ローカルホスト側で鍵を変更した場合に、sshログインすることができなくなります。
このような面倒を避けるには、以下のオプションを付けてsshコマンドを実行するのが良いです。これらのオプションを付与すると、リモートホスト側でknown_hostsファイルへのフィンガープリント登録が行われません。

[testu1@base0 ~]$ ssh -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ood0

毎回、このようなオプションを付与するのが面倒なので、私はsshnoというaliasを.bashrcに登録して使っています。

alias sshno='ssh -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'

広告主へのリンク

おうちでLinuxやるなら、ミニPCがちょうど良いです(私はこの2台を使っています)。

コメント

タイトルとURLをコピーしました