OpenSSHを使って公開鍵認証方式でSSHサーバにログインするための設定・接続方法について調べたので、その備忘録です。
目次
動作確認環境
- Windows 10 (クライアント)
- CentOS 7 (サーバ)
前提条件
-
クライアント側に、OpenSSHがインストールされていること。
- Mac or Linuxの場合、デフォルトでインストールされています。
- Windows 10の場合、「April 2018 Update (1803)」以降、デフォルトでインストールされています。
- それ以外のWindowsの場合、別途インストールする必要があります。
- PowerShell/Win32-OpenSSH – GitHub(https://github.com/PowerShell/Win32-OpenSSH/releases)
- サーバ側に、SSHサーバがインストールされており、かつ「公開鍵認証」が有効になっていること。
SSHサーバの公開鍵認証について
- CentOSにおいてよく利用されるSSHサーバは「sshd」です。
- sshdで公開鍵認証の設定をするためには、設定ファイルの変更が必要です。
sshdの設定ファイル場所
/etc/ssh/sshd_config
- sshdの設定ファイル場所は、上記のとおりです。
公開鍵認証「有効」の設定(SSHサーバ設定ファイル)
PubkeyAuthentication yes
- 設定ファイルに上記の記述を追加すれば公開鍵認証が有効になります。
SSHにおける公開鍵認証とは?
- 公開鍵認証とは、ペアとなる「秘密鍵」と「公開鍵」を使った認証です。
-
公開鍵認証とは、以下の流れで認証を実行します。
- クライアント(ローカル)が、認証を要求する。
- サーバ(リモート)は、クライアントの公開鍵が(サーバに)登録されているかを確認する。
- サーバは、認証を要求してきたクライアントが、ペアとなる秘密鍵をもっているかを確認する。
公開鍵認証でSSHログインする
- クライアントから公開鍵認証を用いてサーバにSSH接続する場合、クライアント側に「秘密鍵」、サーバ側に「公開鍵」、をあらかじめ配置しておく必要があります。
- ここでは、秘密鍵と公開鍵の作成・登録方法、公開鍵認証を使ったログイン方法、について説明します。
秘密鍵と公開鍵を作成する
- 認証に利用する鍵のペア(秘密鍵と公開鍵)を作成します。
鍵ペア作成コマンド
ssh-keygen
-
鍵ペアの作成には「
ssh-keygen
」コマンドを利用します。- このコマンドはクライアント側で実行します。
鍵ペア作成コマンド実行結果
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa): [←入力不要]
Enter passphrase (empty for no passphrase): [←パスフレーズを入力]
Enter same passphrase again: [←同じパスフレーズを入力]
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx username@localhost
The key's randomart image is:
+---[RSA 2048]----+
| oo ... |
| oo. + B . |
|. ooo @ B |
|= o oo.+= O +. |
|.= o .+.S=.ooo |
| . . . .o. |
| . +. |
| .Eo = .o |
| ... .. .... |
+----[SHA256]-----+
- 「
ssh-keygen
」コマンドを実行すると、上記のように情報の入力が求められますので、指示通り入力します。
秘密鍵(Windowsの場合)
C:\Users\username\.ssh\id_rsa
公開鍵(Windowsの場合)
C:\Users\username\.ssh\id_rsa.pub
秘密鍵(Mac or Linuxの場合)
/home/username/.ssh/id_rsa
公開鍵(Mac or Linuxの場合)
/home/username/.ssh/id_rsa.pub
- 作成された鍵ペア(秘密鍵と公開鍵)は、上記のフォルダに保存されます。
ssh-keygenコマンドで指定可能な主なオプション
ssh-keygenコマンド(-tオプション)
ssh-keygen -t dsa
-
-t
オプションで、鍵の暗号アルゴリズムを指定することができます。- 利用できるアルゴリズムは、「
rsa
」、「dsa
」、「ecdsa
」、「ed25519
」です。
- 利用できるアルゴリズムは、「
ssh-keygenコマンド(-bオプション)
ssh-keygen -b 4096
-b
オプションで、鍵のビット数を指定することができます。
ssh-keygenコマンド(-fオプション)
ssh-keygen -f custom_key
-f
オプションで、鍵ペアのファイル名を指定することができます。
ssh-keygenコマンド(オプションの組み合わせ)
ssh-keygen -t dsa -b 4096 -f custom_key
- これらオプションは組み合わせて利用することが可能です。
秘密鍵をクライアントに登録する
秘密鍵を配置する場所(Windowsの場合)
C:\Users\username\.ssh\id_rsa
秘密鍵を配置する場所(Mac or Linuxの場合)
/home/username/.ssh/id_rsa
- 秘密鍵は、クライアント側の上記の場所とファイル名で配置します。
- デフォルトで秘密鍵ファイルが作成される場所なので、手順としては実施不要です。
公開鍵をサーバに登録する
公開鍵を配置する場所
/home/username/.ssh/authorized_keys
-
公開鍵は、サーバ側の上記の場所とファイル名で配置する必要があります。
- 「username」部分は、ログインユーザ名を表しています。
/etc/ssh/sshd_config(59行目付近)
AuthorizedKeysFile .ssh/authorized_keys
- 余談ですが、公開鍵のファイル名については、sshdの設定ファイル内にて上記のように定義されています。
- 公開鍵はクライアント側で作成したため、これをサーバ側に転送する必要があります。
公開鍵転送コマンド1(Windowsの場合)
scp C:\Users\username\.ssh\id_rsa.pub [ログインアカウント名]@[サーバIPアドレス]:~/.ssh/authorized_keys -p [ポート番号]
公開鍵転送コマンド1(Mac or Linuxの場合)
scp /home/username/.ssh/id_rsa.pub [ログインアカウント名]@[サーバIPアドレス]:~/.ssh/authorized_keys -p [ポート番号]
- クライアントからサーバに公開鍵を転送する場合は、上記のコマンドを実行します。
注意:
もし「
もし「
scp: /home/username/.ssh/authorized_keys: No such file or directory
」とエラーが出力された場合は、
転送先(サーバ側)に「/home/username/.ssh
」フォルダが存在していない可能性があります。該当フォルダを作成した上で
もう一度実行してみてください。
公開鍵転送コマンド2
ssh-copy-id [ログインアカウント名]@[サーバIPアドレス] -i [転送する公開鍵ファイルパス] -p [ポート番号]
- 「
ssh-copy-id
」コマンドが使用できるのであれば、こちらを利用する方が便利です。
公開鍵認証を利用してログインする
公開鍵認証ログイン(Windowsの場合)
ssh [ログインアカウント名]@[サーバIPアドレス] -i C:\Users\username\.ssh\id_rsa
公開鍵認証ログイン(Mac or Linuxの場合)
ssh [ログインアカウント名]@[サーバIPアドレス] -i /home/username/.ssh/id_rsa
- 公開鍵認証を利用してログインするためには、上記のコマンドを実行します。
その他の関連操作について
公開鍵を再作成する
- 公開鍵は、秘密鍵から再作成することができます。
公開鍵再作成コマンド(Windowsの場合)
ssh-keygen -y -f C:\Users\username\.ssh\id_rsa
公開鍵再作成コマンド(Mac or Linuxの場合)
ssh-keygen -y -f /home/username/.ssh/id_rsa
- 公開鍵を作成するためには、上記のコマンドを実行します。
公開鍵を再作成してファイルに書き出す(Windowsの場合)
ssh-keygen -y -f C:\Users\username\.ssh\id_rsa > id_rsa.pub
公開鍵を再作成してファイルに書き出す(Mac or Linuxの場合)
ssh-keygen -y -f /home/username/.ssh/id_rsa > id_rsa.pub
- 成功すると標準出力に公開鍵が表示されるため、上記ようにリダイレクトコマンドを使ってファイルに保存します。
秘密鍵のパスフレーズを変更する
秘密鍵パスフレーズ変更コマンド(Windowsの場合)
ssh-keygen -p -f C:\Users\username\.ssh\id_rsa
秘密鍵パスフレーズ変更コマンド(Mac or Linuxの場合)
ssh-keygen -p -f /home/username/.ssh/id_rsa
- 秘密鍵のパスフレーズを変更するは、以下のコマンドを実行します。