公開鍵認証を用いて SSH へ接続する

SERVER


SSH

SSH とは SSL という仕組みによって暗号化された通信を用いて、シェルの遠隔操作を行う仕組みです。

使い心地は TELNET と同じ感じで利用でき、それでいて通信が暗号化されるためにその操作内容を覗かれるようなことはまずなくなるという利点があります。なお、通信は SSH にログインするためのパスワードを入力するまえから既に暗号化されています。

 

SSH を利用する場合、通常は SSH サーバーに登録されたアカウントとパスワードを用いて接続を行うことになるのですけど、今回は秘密鍵ファイルを用いた公開鍵認証方式を使用して、SSH サーバーへ接続する方法を試してみようと思います。

 

公開鍵認証用の鍵ペアを作成する

まずは、接続したいクライアントにログインして、接続に使う秘密鍵を作成します。

秘密鍵の作成には、次の命令を実行します。

ssh-keygen -t rsa -b 4096

このようにすると、次のような問いが表示されるので、回答して行きます。

Enter file in which to save the key (/home/xxxx/.ssh/id_rsa): 鍵ペアを保存するディレクトリを指定します。ディフォルト設定のままで良ければ [Enter] キーを押します。
Enter passphrase (empty for no passphrase): 秘密鍵を登録する際に必要なパスワードを設定します。パスフレーズが不要の場合は [Enter] キーを押します。
Enter same passphrase again: 入力したパスフレーズを、再度入力します。

鍵の保存場所を変更しなかった場合には、ホームディレクトリ内の ".ssh" ディレクトリへ、秘密鍵 "id_rsa" と公開鍵 "id_rsa.pub" が出来上がります。

 

ssh-keygen で秘密鍵を作るときにはパスフレーズの設定が必須のようですが、次のようにして秘密鍵からパスフレーズを取り除くこともできます。

openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa

パスフレーズを設定しないことで、秘密鍵さえあればパスワードなしで接続できるようになります。SSH を用いたコピーや接続先でのコマンド実行などの自動化などにも役立ちます。

 

SSH サーバーを設定する

公開鍵を登録する

鍵ペアが出来上がったら、公開鍵をサーバーに登録します。

公開鍵認証でログインしたいアカウントでサーバーにログインして、先ほど作成した鍵のうち、公開鍵の内容を "~/.ssh/authorized_keys" ファイルに追記します。

ホームディレクトリに ".ssh" ディレクトリがない場合は "mkdir ~/.ssh/" で作成し、"~/.ssh/authorized_keys" ファイルがない場合は新規に作成します。なお、ファイルを新規に作成した場合は "chmod 600 ~/.ssh/authorized_keys" 命令を実行して、アクセス権限を自分専用に変更しておくようにします。

 

公開鍵はテキスト形式になっているので、次のようなテキストを "~/.ssh/authorized_keys" に 1 行で記載します。既に別の公開鍵が登録されている場合は、同じファイルの別の行に記載します。

ssh-rsa dpoc3BjIoLeOyeAAAAB3NzaC1yyeAAAc2EAADAQAQD3BjIoLeOyedQu81dpoczwzXlmV2gCrREts
QTf3BjIoL0HZiwPmjOy8kIPBtMRrNmdx99wIlHyTgIrzNNd1q0MzovT/gRRm6W19KnCWOv/U5mO1IHmW
jjQ8rFzINrIBMxij0XuOUaKsOVQbDNUao85bCNiB/HG9uhvlpOGOGIdEMPOVLH2uESA8qVhNVyOtmNDXO+
IunKTHX9ejI5KEqItek44xxsVxnf7AfpYi2znyjMK7IaGhJF7Qf6Rse6sJiP7U9cKHtawgTN1qq+2OYBxAaN9p
MWekwP/BU9aoAa1ewHZKULSCZC8guSuyT3Atb6qJSYMSsc2HzRp2OnF4aFcCha0WsEyFtjaP+KDb6IUD
R9gb7lk2AU5DzWZYtyX0rYE8joSWMf2WYAdCJ7aa4Q== tomohiro@doublenard3.local

これで、作成した秘密鍵を使ってサーバーへログインできるようになります。

 

公開鍵認証のみを受け入れる

公開鍵認証によるログインだけを許可して、通常のパスワードでののログインを禁止したい場合には、SSH サーバーの設定を調整する必要があります。

管理権限 (root) でサーバーにログインしたら、/etc/ssh ディレクトリへと移動します。そこに sshd_config というファイルがありますので、その中の "PasswordAuthentication" の項目を "no" に設定することで、パスワードによる認証を許可しないようにすることが出来ます。

あとは SSH を再起動してあげれば、次からはパスワードによる認証ではログインできなくなります。

 

公開鍵認証を用いて SSH サーバーへ接続する

秘密鍵を用いて SSH へログインする

公開鍵認証を用いて SSH 接続を行う場合、クライアント側にはサーバーで生成した秘密鍵が必要となります。

秘密鍵をたとえば ~/.ssh/remote-id_rsa-server1 として保存している場合、-i オプションでそれを指定する形で、ssh コマンドを実行します。このとき接続アカウントは、秘密鍵を生成する際に使用したアカウントである必要があるので注意しましょう。

ssh -l user1 -i ~/.ssh/remote-id_rsa-server1 server1

ここでパスフレーズを尋ねられるので、鍵を作成した際に設定したパスフレーズを入力すれば、これでログインが可能となります。

なお、初めて接続するサーバーだった場合には、最初の接続時 1 回だけ、こうかいパスフレーズの設定を省略している場合には、パスフレーズの入力の必要はない感じです。

 

接続時のパスフレーズを省略する

パスフレーズの入力をログイン毎に 1 度だけにして、手間を省くことも可能です。

その場合、次の命令を実行して、パスフレーズをシステムに登録します。

eval `ssh-agent`

ssh-add ~/.ssh/remote-id_rsa-server1

このようにすると "ssh-add" で指定した秘密鍵用のパスフレーズを尋ねられるので、正しいパスフレーズを入力すれば、以降、ログインしている間に限り、パスフレーズの入力が不要となります。

ただし、ログアウトすると登録した情報は消去されるため、再度上記手続きを実行してパスフレーズを登録するか、または接続の度にパスフレーズを入力する必要が出てくるので注意しましょう。