Posted at

CentOS7.3でSSH接続(公開鍵認証)する方法

More than 1 year has passed since last update.


はじめに

こちらの記事ではパスワード認証を用いてSSH接続する方法を紹介しました。しかし、パスワード認証はセキュリティ上望ましくないため、第三者がアクセスする可能性があるサーバーでは、公開鍵認証を用いてSSH接続するのが一般的です。


環境


  • サーバーOS:CentOS 7.3-1611 64bit Minimal

  • クライアントOS:Windows 8.1 Pro 64bit


前提条件



  • sudo できる一般ユーザーでログインしている

    対象の一般ユーザーが存在しない場合、こちらを参照して作成してください。


セットアップ(クライアント)

まずはクライアント側の作業です。


鍵ペアの作成

公開鍵認証に必要な秘密鍵(id_rsa)と公開鍵(id_rsa.pub)のペアを作成します。

鍵ペアはクライアント側で作成し、サーバーへ公開鍵を送信するのが望ましいです。サーバー側や他の端末でも作成できますが、秘密鍵をクライアントへ送信するときに外部へ漏れないように注意する必要があります。

Macの場合はターミナル、Windowsの場合はGit bashを起動し、 ssh-keygen コマンドを実行して作成します。

$ ssh-keygen -t rsa -b 4096

Generating public/private rsa key pair.

-t オプションで、作成する鍵の種類を指定します。 rsa を指定すると、SSHプロトコルバージョン2のRSA鍵が作成されます。公開鍵暗号方式は主にRSAが使用されています。

-b オプションで、作成する鍵のサイズを指定します。2048bit以上なら問題ない強度ですが、より強固にするためにここでは4096bitを指定します。

-f オプションで鍵ペアの保存先を指定しない場合、デフォルトのパス /c/Users/{ユーザー名}/.ssh/id_rsa でいいか確認されます。問題なければそのままEnterキーを押下します。公開鍵の名前は秘密鍵の名前の末尾に .pub が付いたものになります。

Enter file in which to save the key (/c/Users/{ユーザー名}/.ssh/id_rsa):

秘密鍵に設定するパスフレーズの入力を求められるので、2回入力します。このパスフレーズは秘密鍵の使用時(SSHログイン時)に必要であり、接続先の端末には送信されません。

Enter passphrase (empty for no passphrase):

Enter same passphrase again:


公開鍵のアップロード

公開鍵をサーバーへアップロードします。サーバーへ登録したら削除するため、ここでは一時ファイル置き場である /tmp フォルダへアップロードします。

$ scp ~/.ssh/id_rsa.pub {ユーザー名}@{ホスト名}:/tmp

サーバーへアップロードする方法は何でも構いません。もっというと、公開鍵の文字列をサーバーに入力できればアップロードしなくてもいいです。


セットアップ(サーバー)

ここからはサーバー側の作業です。


SSHサーバーのインストール

CentOS 7.3では openssh-server がプリインストールされているため、インストール作業は不要です。


SSHの設定

SSHの設定ファイルを表の通りに修正し、セキュリティの強度を上げます。

$ sudo vi /etc/ssh/sshd_config

説明
変更前
変更後

rootユーザーによるログインを許可するか
#PermitRootLogin yes
PermitRootLogin no

パスワード認証を許可するか
#PasswordAuthentication yes
PasswordAuthentication no

パスワードなしを許可するか
#PermitEmptyPasswords no
PermitEmptyPasswords no


SSHサービスの起動

SSHのサービスを起動します。

$ sudo systemctl start sshd.service

サービスが起動したか確認します。

$ sudo systemctl status sshd.service

緑の字で active (running) と表示されたらSSHのサービスが起動しています。


ファイアウォールの設定

CentOS 7.3ではSSH用のポートが元から開放されているため、設定は不要です。


ネットワークの設定

OSの起動時に自動でネットワークに接続するようにします。

$ sudo nmcli c mod enp0s3 connection.autoconnect yes

cconnection の略です。


IPアドレスの確認

$ ip a show enp0s3

inet から始まる箇所がサーバーのIPアドレス(IPv4)です。


公開鍵の登録

クライアントからアップロードした公開鍵を登録します。 ~/.ssh/authorized_keys に公開鍵の内容を追記することで登録が完了します。 authorized_keys には複数の公開鍵を登録することもできます。そのため、mv でなく cat で追記します。

# `~/.ssh` フォルダが存在しない場合、作成する

$ mkdir ~/.ssh

# `~/.ssh/authorized_keys` に公開鍵の内容を追記する
$ cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

# 所有者(今ログインしているユーザー)以外のアクセスを許可しない
$ chmod 700 ~/.ssh/
$ chmod 600 ~/.ssh/authorized_keys

# 登録済の公開鍵は削除しておく
$ rm /tmp/id_rsa.pub


SSH接続方法(クライアント)

Macの場合はターミナル、Windowsの場合はGit bashの他、Tera TermやPuTTYなどのSSHクライアントからSSH接続できます。


SSH接続の開始

$ ssh -i ~/.ssh/id_rsa {ユーザー名}@{ホスト名}

-i オプションで接続先に登録した公開鍵とペアになっている秘密鍵を指定します。

パスフレーズの入力を求められますので、秘密鍵に設定したパスフレーズを入力してEnterキーを押下します。

Enter passphrase for key '/c/Users/{ユーザー名}/.ssh/id_rsa':


SSH接続の終了

$ exit


参考リンク