鍵が無いとサーバには入れませんよ「鍵交換方式によるSSH接続」

「『つぐない』って誰が歌っていた曲だっけ?」
ふとした会話の中に生まれる疑問。しかし今ではスマホなどで検索すれば、すぐに情報が手に入る。
母親に電話して聞いたり、答えがわからずモヤモヤしたままに会話を進めたりすることもなくなりました。

そんな情報化社会を裏で支えているのがサーバというコンピュータです。
サーバはいろいろな機能も持ち、組み合わせて便利な世の中に寄与してたりしています。
裏を返せば、サーバに悪い奴が入って情報を混乱させたりもできるわけで
サーバセキュリティは、情報化社会の根幹を揺るがしかねない、重要なことなわけです。

さて、最近では自分でVPSを借りてサーバを立てるということも、多くなってきました。
そんな大切な自分のサーバにはセキュリティ性の高い「鍵交換方式によるSSH接続」で
入れるようにして悪い奴が入って来ないようにしましょう。

鍵交換方式によるSSH接続ってなに

悪い奴はコンソール(いわゆる黒い画面)からサーバに成りすましで入ってこようとします。
通常、IDとパスワードで本人確認をするのですが、IDとパスワードが盗み見されてしまったら、簡単に成りすましてサーバに入ることができます。

そこで、サーバにある鍵(公開鍵)とクライアントにある鍵(秘密鍵)を照合して、より厳密に本人確認するのが「鍵交換方式によるSSH接続」です。
まあ、かなりザックリというと、明と日本が交易をしていた時代に正式な貿易船か確認するため用いた勘合貿易のような感じです。(実際はもっと複雑な仕組みになっています。)
なお、SSH接続なため、通信も暗号化され盗聴されないようになっています。

図1:鍵が無いとサーバに入れませんよ
図1:鍵が無いとサーバに入れませんよ

VPSサービスConoHaで鍵交換方式によるSSH接続

今回はGMOのVPSサービスConoHaで立ち上げたサーバで鍵交換方式によるSSH接続を実現したいと思います。
なお、ConoHaではサーバ立ち上げ時の設定により鍵交換方式によるSSH接続を選択できます。そのために必要なサーバにある鍵(公開鍵)とクライアントにある鍵(秘密鍵)は既に設定してありConoHaのサイトからクライアントにある鍵(秘密鍵)をダウンロードできる形になっています。

以下の方法は、追加したユーザの各鍵の生成と設定方法を記述していきます。

※この先の設定により今までのログインに支障をきたす恐れがあります。その際、当サイトは責任を負えません。自己責任の上で設定をお願いいたします。

ConoHaでOSをCentOS7.1に選んだ場合は既に
openssl.x86_64:1.0.1e-42.el7 / openssl-libs.x86_64:1.0.1e-42.el7
openssh.x86_64:6.6.1p1-11.el7
openssh-clients.x86_64:6.6.1p1-11.el7 / openssh-server.x86_64:6.6.1p1-11.el7
がインストールされています。
もちろん、opensslは2014年に発生したOpenSSL脆弱性に対応したバージョンです。

Linuxの新規ユーザを作ろう

これは普通にLinuxコマンドの「adduser」で作ります。今回は「ika」というユーザを作って、このユーザで鍵を作ります。
# adduser ika
adduser
ここではユーザを適当に作ってます。ちゃんと作るときはadduserリファレンスを参照してください。

/etc/ssh/sshd_configファイルの更新

ConoHaではデフォルトでOpenSSLがインストールされています。もしお使いのサーバで入っていない場合は、yumコマンド等でインストールしてください。

viエディタでsshdの設定を変更します。
# vi /etc/ssh/sshd_config
edit_sshd_config
上記コマンドで設定ファイルを変更します。変更箇所は下記のとおりです。

■変更点1
------------------------------------
    ・
    ・
#RSAAuthentication yes
#PubkeyAuthentication yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile      .ssh/authorized_keys
  ↓ 上2項目の「 # 」を消す。(コメントアウトを外して有効にします。)
    ・
    ・
RSAAuthentication yes
PubkeyAuthentication yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile      .ssh/authorized_keys
------------------------------------

上記の変更は下記の意味があります。
RSAAuthentication:RSA認証の許可する
PubkeyAuthentication:公開鍵認証の許可する
AuthorizedKeysFile:公開鍵の保存ディレクトリ場所を指定

■変更点2
------------------------------------
PasswordAuthentication yes
  ↓ もし上記の項目がyesになっていたら「 no 」に変更。
PasswordAuthentication no
------------------------------------

PasswordAuthentication:yesのままだと、鍵交換方式を使用しなくても
パスワードでログインができてしまいます。セキュリティ強化のためにも「no」に変更して
鍵を持っていない場合はログインができないようにします。
※注意1:この設定をすると秘密鍵をなくしてしまった場合、サーバにログインできなくなります。

設定ファイル「/etc/ssh/sshd_config」に記述ミスがあると、サーバに二度とログインできなくなる可能性があります。下記コマンドにて設定ファイルの書式に問題がないか確認を必ず実施してください。
# /usr/sbin/sshd -t
実行後、エラーが出なければ問題ありません。

この設定により、このサーバはssh接続で鍵交換でのログインしかできない状態になります。設定および設定ファイル内容の確認が終わったら有効にするため、下記コマンドでsshdを再起動してください。
#systemctl restart sshd

サーバ上で鍵を作成する

新規で作成したikaユーザの公開鍵と秘密鍵を作成します。
まず、現在rootユーザでログインしているので下記コマンドでikaユーザに変更します。
#su – ika
su-ika
プロンプトが[root@XXX-XXX-XXX-XXX ~]から[ika@XXX-XXX-XXX-XXX ~]に変更されたことを確認してください。

公開鍵と秘密鍵の生成

ikaユーザでログインできていることを確認したら、下記コマンドを実行してください。

#ssh-keygen -t rsa

[ika@XXX-XXX-XXX-XXX ~]$
[ika@XXX-XXX-XXX-XXX ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ika/.ssh/id_rsa):
Created directory '/home/ika/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ika/.ssh/id_rsa.
Your public key has been saved in /home/ika/.ssh/id_rsa.pub.
    ・
    ・
[ika@XXX-XXX-XXX-XXX ~]$

実行時に入力を求められる内容は以下の通りです。
・Enter file in which to save the key (/home/ika/.ssh/id_rsa):
  作成する秘密鍵・公開鍵のファイル名を入力してね
  (デフォルトは/home/ika/.ssh/の配下にid_rsaという秘密鍵・公開鍵を作りますよ)
 →通常はデフォルトで問題ないので、そのままENTERキーを押してください。
  なお、ユーザカレントディレクトリ(ikaユーザの場合は/home/ika/)に.sshディレクトリがない場合は
  自動で作成してくれます。

・Enter passphrase (empty for no passphrase):
  パスフレーズを入力してね(無い場合はパスフレーズ無しになるよ)
 →パスフレーズとは鍵を使ってログインする際に入力するパスワードのようなものです。
  (厳密には違いがあるのですが、ここではこれくらいの説明で……)

  なお、ここで設定すると鍵を使ってログインする前にパスフレーズを入力する必要があり、
  もし秘密鍵が盗まれても、パスフレーズがわからないとログインできないため
  セキュリティ性が高くなります。

・Enter same passphrase again:
  もう一回入力した同じパスフレーズを入力してね(確認です)

以上で入力項目は終わりです。その後
Your identification has been saved in /home/ika/.ssh/id_rsa.
Your public key has been saved in /home/ika/.ssh/id_rsa.pub.

あなたの秘密鍵は「/home/ika/.ssh/id_rsa」。公開鍵は「/home/ika/.ssh/id_rsa.pub」にできてるぜ。

これで鍵の生成は完了です。

サーバに公開鍵を設定する

サーバへ公開鍵設定

ls-id_rsa
上記のように/home/ika/.ssh配下に
id_rsa・・・公開鍵
id_rsa.pub・・・秘密鍵
が作成されています。

下記コマンドにてauthorized_keysファイルに公開鍵の内容を挿入してください。
#cat id_rsa.pub >> ~/.ssh/authorized_keys
このファイルは/etc/ssh/sshd_configファイル内AuthorizedKeysFileで設定されているファイルです。

また、authorized_keysファイルはパーミッションを600にする必要があります。
下記コマンドを実行しパーミッションを変更してください
#chmod 600 authorized_keys
ls-authorized_keys

これでサーバへ公開鍵設定は終了です。

クライアントに秘密鍵を移動する

クライアントへ秘密鍵移動

秘密鍵は「秘密」なので取扱いに注意してください。
id_rsaファイル内はテキストになっています。

秘密鍵を自分のPC等クライアントに移動する際は、暗号化されるSFTPを使ったり
SSH接続されているコンソールからcat等でid_rsaファイルを開き—–BEGIN RSA PRIVATE KEY—–から—–END RSA PRIVATE KEY—–をコピーしてPCでテキストファイルに貼りつける方法で移動してください。
※テキストをコピーする際は「—–BEGIN RSA PRIVATE KEY—–」「—–END RSA PRIVATE KEY—–」も含めてコピーし貼りつけること。

暗号化されないFTPでの移動は第三者に盗み見られる可能性があります。

コピーしたテキストは適当な名前を付け、拡張子を「.pem」にして保存します。
ここでは「ssh_ika.pem」とします。

これでクライアントへ秘密鍵移動は終了です。

さて「鍵交換方式によるSSH接続」しますよ

鍵交換方式によるSSH接続可能なコンソールソフトをクライアントPCにインストールして接続します。
Windowsですと「Putty」や「Rlogin」などが有名です。(すみません、MACは使ったことがないもんで……)
各ソフトによって秘密鍵の指定方法が違います。それぞれの説明書等をご覧ください。

最後にサーバをキレイに

接続されることが確認できたら、/home/ika/.sshディレクトリ配下にある今回作成した公開鍵と秘密鍵を削除しましょう。秘密鍵がそのまま残っているのもセキュリティ上よろしくありません。
※注意:authorized_keysファイルは消してはいけません!

#rm id_rsa id_rsa.pub
rm-id_rsa

「鍵交換方式によるSSH接続」でセキュアなサーバ運用をしましょう!

追伸:つぐない-テレサテン(wikipedia)

1 thoughts on “鍵が無いとサーバには入れませんよ「鍵交換方式によるSSH接続」

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

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