Linux
SSH
公開鍵認証方式

公開鍵認証でパスワード入力を省略する

ローカルで起動しているサーバにログインする際
毎回パスワードを入力するのが面倒なので、公開鍵認証を使用して省略します。

環境

  • 端末A(Ubuntu17) ー接続する側
  • 端末B(CentOS7) ー接続される側

Linux以外でも多分同じ。

公開鍵認証で接続するための4ステップ

スライド2.JPG

  1. 「接続する側」で秘密鍵と公開鍵を作る。
  2. 1で作った公開鍵を「接続される側」に送る。
  3. 「接続される側」で、送られてきた公開鍵をauthorized_keysファイルに登録(追記)する。
  4. 「接続する側」から「接続される側」にSSH接続し、パスフレーズを入力。

これ以降はSSHなどで接続した時、パスワードを聞かれなくなります。

公開鍵認証で使用する3つのファイル

スライド1.JPG

実際にやってみる

「接続する側」で秘密鍵と公開鍵を作る

まず端末A「接続する側」で秘密鍵と公開鍵を作るため、
以下のコマンドを実行します。

$ ssh-keygen -t rsa

コマンド実行後パスフレーズの入力を求められます。

Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): Enterキー
Created directory '/home/user/.ssh'.
Enter passphrase (empty for no passphrase): パスフレーズ入力
Enter same passphrase again: 再度パスフレーズ入力

パスフレーズは忘れたら鍵を作り直さないといけなくなるので注意。

以上の入力が終わって、こんなのが出たら秘密鍵と公開鍵の作成は終了です。
鍵は/home/user/.sshに保存されています。

Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
(フィンガープリント)

「接続される側」に公開鍵を送る

端末A「接続する側」で作った公開鍵を端末B「接続される側」に送ります。
いろんな方法がありますが、今回はscpコマンドを使います。

$ scp ~/.ssh/id_rsa.pub user@host:~

「接続される側」で、公開鍵を登録する

端末Aから送られてきた公開鍵を登録します。
端末Bに.sshディレクトリがない場合はmkdirなどで作っておきましょう。

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

コマンド実行後は送られてきたid_rsa.pubを削除しても大丈夫です。

接続する

鍵の登録が済んだのでsshコマンドで公開鍵認証で接続できるか確認しましょう。
最初の接続は鍵を作った際に入力したパスフレーズを聞かれるので入力します。
接続できたらexitで一旦抜けて、再度接続してみてください。
パスワードを聞かれなければ公開鍵認証成功です。

補足

接続できない場合は以下の点を確認してください。

参考

公開鍵暗号 - wikipedia
https://www.pistolfly.com/weblog/2007/02/ssh.html