SSH公開鍵認証でリモートログインする方法

SSHでサーバー毎に毎回異なるパスワードを入力するのって大変。

どっかにメモったり、パスワード管理アプリ使ってると思うのですが、ログインする前の一手間が煩わしいです。

そんな煩わしさから解放される方法を紹介します。

レンタルサーバーやAWSでも当たり前に使われている方法で、Linuxを触るようになって間もない方の参考になると思います。

秘密鍵と公開鍵のキーペア作成

プライベートキーや公開キーと言われもしますが、分かりやすく言うと、

鍵(秘密鍵)と鍵穴(公開鍵)を作るということです。

SSHでパスワード認証をさせないように設定すれば、秘密鍵を持っているクライアントだけがサーバーにログインすることができます。

その方法については後ほど書くことにします。

鍵の設置場所

秘密鍵はクライアント、公開鍵はサーバーに置きます。

配置場所
秘密鍵SSHクライアント側
公開鍵SSHサーバー側

キーペアはどこで作ればいいのか?

実はキーペアはどこで作ってもいいです。

鍵はテキストファイルなので、秘密鍵と公開鍵を所定の場所に設置すれば大丈夫。

鍵が鍵穴に合えばいい訳ですから、どこで作られた物でもいいのです。

ただし、クライアント側で作れば公開鍵をコマンドで登録する方法があるので便利。

ssh-keygenでed25519暗号化アルゴリズムを指定

例として、Macのターミナルアプリでキーペアを作ります。

ssh-keygenに「-t」オプションを付けて安全面と性能面で定評のある暗号化方式「ed25519」を指定

ssh-keygen -t ed25519

秘密鍵用のパスフレーズを入力します。

Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/trinity/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): **********
Enter same passphrase again: **********
Your identification has been saved in /Users/trinity/.ssh/id_ed25519.
Your public key has been saved in /Users/trinity/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx trinity@su.localhost
The key's randomart image is:
+--[ED25519 256]--+
|  B.+*+=o ....   |
| . @..o .. oo    |
|. = Bo..  E..    |
|oo O.=.          |
|o.=o+ o S        |
| .o* . .         |
|  +.o            |
| . =.            |
|  =+o            |
+----[SHA256]-----+

パスフレーズ無しで作成することもできますが、万が一、秘密鍵が漏れてしまえば危険です。

鍵はホームディレクトリの「.ssh」の中に作られます。

格納場所
秘密鍵~/.ssh/id_ed25519
公開鍵~/.ssh/id_ed25519.pub

ssh-copy-idで作成した公開鍵をサーバーに転送

ssh-copy-id -i $HOME/.ssh/id_ed25519 USER_NAME@SERVER_NAME

SSHでログインする際のパスワードを入力すると、公開鍵がサーバーに転送されます。

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_ed25519.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
USER_NAME@SERVER_NAME's password: **********

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'USER_NAME@SERVER_NAME'"
and check to make sure that only the key(s) you wanted were added.

公開鍵認証でログインチェック

ssh -i $HOME/.ssh/id_ed25519 USER_NAME@SERVER_NAME

キーペアを作成時に入力した秘密鍵のパスフレーズを入力します。

Enter passphrase for key '/Users/trinity/.ssh/id_ed25519': **********

SSHサーバー パスワード認証の無効化

公開鍵認証でSSHログインができたら、パスワード認証を無効にすることもできます。

vi /etc/ssh/sshd_config

「PasswordAuthentication」で検索すると以下の行にジャンプすると思います。

#PasswordAuthentication yes

以下のように書き換えてパスワード認証を無効化します。

PasswordAuthentication no

SSHを再起動すれば設定が反映されます。

service ssh restart

SSHログインを公開鍵認証にしたからと気を抜かず、誰がどこからアクセスするのかルールを決めるのもSuperUserの役割です。

下の関連記事もご覧ください。

推奨されていない暗号化方式

引数暗号化アルゴリズム
rsa(非推奨)使うのであれば4096ビットの鍵長にする。
dsa(非推奨)鍵長が1024ビットまでしか使えないので強度が弱い。

RSA

RSAは非推奨となっているので使わない方がいいのですが、レガシーサーバー間で公開鍵認証方式を取るケースでは鍵長を4096ビットに設定します。

ssh-keygen -t rsa -b 4096

DSA

OpenSSHのssh-keygenで鍵タイプをDSAして、鍵長を1024ビット以上にしようとすると次のように公開鍵認証用のキーペアは1024ビットするよう促されます。

DSA keys must be 1024 bits

今となっては、DSAは推奨されていないので使わないでください。

秘密鍵のパスフレーズを削除する方法

開発中に何度もサーバーにログインしなければならないような時、毎回パスフレーズを入力しなければならないのは億劫です。

ここで秘密鍵のパスフレーズを削除する方法を紹介します。

ssh-keygen -f $HOME/.ssh/id_ed25519 -p
  • 「Enter old passphrase」で現在のパスフレーズを入力
  • 「Enter new passphrase」で何も入力せずに「return」
  • 「Enter same passphrase again」で何も入力せずに「return」
Enter old passphrase: **********
Key has comment 'trinity@su.localhost'
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.

秘密鍵のパスフレーズを再設定

パスフレーズを再設定する際も同じssh-keygenコマンドで行います。

ssh-keygen -f $HOME/.ssh/id_ed25519 -p
  • 「Enter new passphrase」でパスレーズを入力して「return」
  • 「Enter same passphrase again」で同じパスフレーズを入力して「return」
Key has comment 'trinity@su.localhost'
Enter new passphrase (empty for no passphrase): **********
Enter same passphrase again: **********
Your identification has been saved with the new passphrase.

関連記事

コメント

この記事へのコメントはありません。

おすすめ記事

  1. 【多段SSH】公開鍵認証で中継サーバー経由のログインが簡単!

  2. インターネットに繋いだサーバーで最初にやらなければならない設定

  3. Swapアウトしているプロセスを特定する方法

  4. Linuxを極めるならコマンドよりも〇〇が先だ!!

  5. お名前ドットコムのDNS設定方法