OpenSSHを使って 公開鍵認証で ログインする

 

2018年10月10日 OpenSSH
OpenSSHを使って 公開鍵認証で ログインする

OpenSSHを使って公開鍵認証方式でSSHサーバにログインするための設定・接続方法について調べたので、その備忘録です。

 

目次

  1. 本ページで利用するチートシート
  2. SSHにおける公開鍵認証とは?
  3. 動作確認環境
  4. 公開鍵認証でSSHログインする
  5. その他の関連操作について

本ページで利用するチートシート

本ページで利用するチートシート
# 公開鍵認証「有効」の設定(SSHサーバ設定ファイル)
PubkeyAuthentication yes

# ssh-keygenコマンド(オプションなし)
ssh-keygen

# ssh-keygenコマンド(-tオプション)
ssh-keygen -t dsa

# ssh-keygenコマンド(-bオプション)
ssh-keygen -b 4096

# ssh-keygenコマンド(-fオプション)
ssh-keygen -f custom_key

# ssh-keygenコマンド(オプションの組み合わせ)
ssh-keygen -t dsa -b 4096 -f custom_key

# 公開鍵をサーバに転送する(Windowsの場合)
scp C:\Users\username\.ssh\id_rsa.pub [ログインアカウント名]@[サーバIPアドレス]:~/.ssh/authorized_keys

# 公開鍵をサーバに転送する(Mac or Linuxの場合)
scp /home/username/.ssh/id_rsa.pub [ログインアカウント名]@[サーバIPアドレス]:~/.ssh/authorized_keys

# 公開鍵認証ログイン(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

 

 

SSHにおける公開鍵認証とは?

  • 公開鍵認証とは、ペアとなる「秘密鍵」と「公開鍵」を使った認証です。
  • 公開鍵認証とは、以下の流れで認証を実行します。
    1. クライアント(ローカル)が、認証を要求する。
    2. サーバ(リモート)は、クライアントの公開鍵が(サーバに)登録されているかを確認する。
    3. サーバは、認証を要求してきたクライアントが、ペアとなる秘密鍵をもっているかを確認する。

 

 

動作確認環境

  • Windows 10 (クライアント)
  • CentOS 7 (サーバ)

 

前提条件

  • クライアント側に、OpenSSHがインストールされていること。
    • Mac or Linuxの場合、デフォルトでインストールされています。
    • Windows 10の場合、「April 2018 Update (1803)」以降、デフォルトでインストールされています。
    • それ以外のWindowsの場合、別途インストールする必要があります。
  • サーバ側に、SSHサーバがインストールされており、かつ「公開鍵認証」が有効になっていること。
NOTE : SSHサーバの公開鍵認証について

CentOSにおいてよく利用されるSSHサーバはsshdです。sshdで公開鍵認証の設定をするためには、設定ファイルの変更が必要です。 sshdの設定ファイルのフルパスは、以下のとおりです。

sshdの設定ファイルのフルパス
/etc/ssh/sshd_config

設定ファイルに以下のとおりの記述を追加すれば、公開鍵認証が有効になります。

公開鍵認証「有効」の設定(SSHサーバ設定ファイル)
PubkeyAuthentication yes

 

 

公開鍵認証でSSHログインする

公開鍵認証ログインのイメージ
公開鍵認証ログインのイメージ
  • クライアントから公開鍵認証を用いてサーバにSSH接続する場合、クライアント側に「秘密鍵」、サーバ側に「公開鍵」、をあらかじめ配置しておく必要があります。
  • ここでは、秘密鍵と公開鍵の作成・登録方法、公開鍵認証を使ったログイン方法、について説明します。

 

 

秘密鍵と公開鍵を作成する

  1. 認証に利用する鍵のペア(秘密鍵と公開鍵)を作成します。
  2. 鍵ペアの作成には、以下のようにssh-keygenコマンドを利用します。このコマンドはクライアント側で実行します。
ssh-keygenコマンド(オプションなし)
$ ssh-keygen

 

  1. 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]-----+
  1. 作成された秘密鍵と公開鍵は以下のフォルダに保存されます。
秘密鍵(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

 

指定可能な主なオプション
  1. -tオプションで、鍵の暗号アルゴリズムを指定することができます。
    • 利用できるアルゴリズムは、「rsa」、「dsa」、「ecdsa」、「ed25519」です。
ssh-keygenコマンド(-tオプション)
ssh-keygen -t dsa

 

  1. -bオプションで、鍵のビット数を指定することができます。
ssh-keygenコマンド(-bオプション)
ssh-keygen -b 4096

 

  1. -fオプションで、鍵ペアのファイル名を指定することができます。
ssh-keygenコマンド(-fオプション)
ssh-keygen -f custom_key

 

  1. オプションは組み合わせて利用することが可能です。
ssh-keygenコマンド(オプションの組み合わせ)
ssh-keygen -t dsa -b 4096 -f custom_key

 

 

秘密鍵をクライアントに登録する

  1. 秘密鍵ファイルを、クライアントPCの以下の場所・ファイル名で配置します。
    • デフォルトで秘密鍵ファイルが作成される場所なので、手順としては実施不要です。
秘密鍵を配置する場所(Windowsの場合)
C:\Users\username\.ssh\id_rsa
秘密鍵を配置する場所(Mac or Linuxの場合)
/home/username/.ssh/id_rsa

 

 

公開鍵をサーバに登録する

  1. 公開鍵ファイルは、ログインしたいサーバ上の(ログインしたい)アカウントのホームディレクトリにある、以下の場所・ファイル名で配置します。
公開鍵を配置する場所
/home/username/.ssh/authorized_keys

 

NOTE : 公開鍵のファイル名について

公開鍵ファイルはsshdが利用します。 sshdが利用する公開鍵ファイルのファイルパスは、以下のように設定ファイルで定義されています。

/etc/ssh/sshd_config(59行目付近)
AuthorizedKeysFile .ssh/authorized_keys

 

  1. クライアントからサーバに公開鍵を転送する場合は、以下のコマンドを実行します。
公開鍵をサーバに転送する(Windowsの場合)
scp C:\Users\username\.ssh\id_rsa.pub [ログインアカウント名]@[サーバIPアドレス]:~/.ssh/authorized_keys
公開鍵をサーバに転送する(Mac or Linuxの場合)
scp /home/username/.ssh/id_rsa.pub [ログインアカウント名]@[サーバIPアドレス]:~/.ssh/authorized_keys
注意:
もし「 scp: /home/username/.ssh/authorized_keys: No such file or directory 」のようなエラーが出力された場合、 転送先(サーバ側)に「/home/username/.ssh」フォルダが存在していない可能性があります。該当フォルダを作成した上で もう一度実行してみてください。

 

 

公開鍵認証を利用してログインする

  1. 公開鍵認証を利用してログインするためには、以下のコマンドを実行します。
公開鍵認証ログイン(Windowsの場合)
ssh [ログインアカウント名]@[サーバIPアドレス] -i C:\Users\username\.ssh\id_rsa
公開鍵認証ログイン(Mac or Linuxの場合)
ssh [ログインアカウント名]@[サーバIPアドレス] -i /home/username/.ssh/id_rsa

 

 

その他の関連操作について

公開鍵を再作成する

  1. 公開鍵は、秘密鍵から再作成することができます。
  2. 公開鍵を作成するためには、以下のコマンドを実行します。
公開鍵を再作成コマンド(Windowsの場合)
ssh-keygen -y -f C:\Users\username\.ssh\id_rsa
公開鍵を再作成コマンド(Mac or Linuxの場合)
ssh-keygen -y -f /home/username/.ssh/id_rsa

 

  1. 上記コマンドが成功すると標準出力に公開鍵が表示されるため、以下のようにリダイレクトを使ってファイルに保存します。
公開鍵を再作成してファイルに書き出す(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

 

 

秘密鍵のパスフレーズを変更する

  1. 秘密鍵のパスフレーズを変更するは、以下のコマンドを実行します。
秘密鍵パスフレーズ変更コマンド(Windowsの場合)
ssh-keygen -p -f C:\Users\username\.ssh\id_rsa
秘密鍵パスフレーズ変更コマンド(Mac or Linuxの場合)
ssh-keygen -p -f /home/username/.ssh/id_rsa

 

 

 

 

Programming Style