ssh のアクセス制御 (IPアドレス制限、鍵を使ったログイン)

LINEで送る
Pocket

ssh によるリモートサーバへの接続は、通信内容が暗号化されおりセキュアな通信が行えます。しかしグローバルに公開されているサーバのsshd サービスには外部からブルートフォースアタック(総当たり攻撃)、ディクショナリアタック(辞書攻撃)などの攻撃を常に受けています。管理者自身が強固なパスワードを設定していても、一般ユーザに安易なパスワードを設定されてしまっては、外部からの侵入を許してしまう恐れがあります。

それらを簡単にブロックする方法として公開鍵認証があります。デフォルトでは、接続先に設定されているパスワードを入力するパスワード認証を行ってログインしますが、事前に一対の公開鍵と秘密鍵を作成して、サーバー側に公開鍵を、クライアント側に秘密鍵を用意しておく公開鍵認証を利用すれば、外部からの攻撃による侵入を防ぐ事ができます。

鍵を作成するコマンドは、ssh-keygen です。鍵の暗号化方式は、デフォルトの rsa を使用します。以下のコマンドで秘密鍵と公開鍵が作成されます。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/taro/.ssh/id_rsa):    <- 秘密鍵のファイル名はデフォルトのまま未入力で[Enter]
Created directory '/home/taro/.ssh'.
Enter passphrase (empty for no passphrase):                      <- 任意のパスフレーズを入力(未入力でもかまいません)
Enter same passphrase again:                                     <- パスフレーズの確認
$ ls ~/.ssh/
id_rsa  id_rsa.pub                                               <- id_rsa が秘密鍵、id_rsa.pub が公開鍵

作成された公開鍵を接続先のサーバにコピーします。

$ scp ~/.ssh/id_rsa.pub 接続先サーバアドレス:

接続先サーバにログインして公開鍵をauthorized_keysファイルへ登録します。

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

sshd_config ファイルを編集してパスワード認証によるログインは無効にし、sshd のサービスを再起動します。
/etc/ssh/sshd_config

PasswordAuthentication no
CentOS の場合
$ sudo systemctl restart sshd.service
Ubuntu の場合
$ sudo service sshd restart

再度クライアントからサーバへsshログインしてみます。

$ ssh 接続先サーバアドレス
公開鍵を登録したクライアントからアクセスした場合は、先ほど設定したパスフレーズの入力を求められます。
Enter passphrase for key '/home/tsuyoshi/.ssh/id_rsa':

公開鍵を登録していないクライアントからアクセスした場合は、アクセスが拒絶されます。
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
LINEで送る
Pocket

  • このエントリーをはてなブックマークに追加

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください