はじめに
こちらの記事ではパスワード認証を用いて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
c
は connection
の略です。
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