ChocoMemo

学んだことをメモがわりにアップしていきます!

さくらVPS初期設定 3 - SSH接続と公開鍵認証設定


SSH接続用の公開鍵認証作成

rootと作業用ユーザーにパスワードを設定していても、これは最低限のセキュリティ対策である。いくらパスワードを複雑にしたとしても、それが割れたらログインされる。そこで、SSH接続には公開鍵認証を利用する。これはサーバーに公開鍵を置き、クライアントはそれに対した秘密鍵で接続を認証する、というものである。認証に鍵を用いるため、秘密鍵となるファイルにアクセスできる環境からしかログインできない。

鍵を使用するユーザーの限定とパスフレーズ設定により、秘密鍵ファイルが漏洩したときの対策もおこなえる。

Macのターミナルを起動

ssh-keygenコマンドを実行する。

$ ssh-keygen

コマンドを実行すると、鍵ファイルの名前とパスフレーズをたずねられる。ファイル名はid_rsa、パスフレーズはある程度、複雑なもの(4文字以下だとエラーになる)を入力しておく。 ※コマンドを実行したら、.sshディレクトリーが作成されてそれ以下にid_rsaが作成されると思ったら、実行した場所にid_rsaが作成されていた。だから、以下ように.sshディレクトリーを作成してからコマンドを実行した。

生成に成功すると、以下のような出力結果がでる。

xxxxx:~ xxxxx$ cd
xxxxx:~ xxxxx$ mkdir .ssh
xxxxx:~ xxxxx$ cd .ssh
xxxxx:.ssh xxxxx$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xxxxx/.ssh/id_rsa): id_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
68:ff:d3:94:f2:c9:24:6d:56:85:6c:a1:65:35:43:34 xxxxx@xxxxx.local
The key's randomart image is:
+--[ RSA 2048]----+
|             .*E.|
|             ++ =|
|            .. . |
|       .      .  |
|      o S  . o   |
|     . .  o B    |
|        .  @ .   |
|         .. =    |
|          ..     |
+-----------------+
xxxxx:.ssh xxxxx$ ls
id_rsa      id_rsa.pub

これで/Users/xxxxx/.sshに公開鍵id_rsa.pubと秘密鍵id_rsaが作成された。秘密鍵の方は他のユーザに見られないよう、パーミッションも変更しておこうと思ったが、パーミッションを確認したところ既に600の状態だったが一応実行した。

xxxxx:~ xxxxx$ cd
xxxxx:~ xxxxx$ cd .ssh
xxxxx:.ssh xxxxx$ ls -l
total 16
-rw-------  1 xxxxx  xxxxx  1766  8 15 00:54 id_rsa
-rw-r--r--  1 xxxxx  xxxxx   399  8 15 00:54 id_rsa.pub
xxxxx:.ssh xxxxx$ chmod 600 id_rsa
xxxxx:.ssh xxxxx$ ls -l
total 16
-rw-------  1 xxxxx  xxxxx  1766  8 15 00:54 id_rsa
-rw-r--r--  1 xxxxx  xxxxx   399  8 15 00:54 id_rsa.pub
xxxxx:.ssh xxxxx$ 

サーバーのSSH設定を変更

はじめに、公開鍵認証でログインしたいユーザーのHOMEへ、公開鍵ファイルとなるid_rsa.pubを送信する。Macの場合、scpコマンドで転送する。id_rsa.pubがMac側のユーザーHOME以下の.sshディレクトリーにある場合、実行するコマンドは以下のようになる。

$ cd
$ cd .ssh
$ scp -P 22 id_rsa.pub xxxx@xxx.xxx.xxx.xxx:

-Pパラメータでポート番号を指定、@の前後にユーザーと接続先。その後に:を付けてサーバー上の転送先ディレクトリーを指定する。未指定の場合はHOMEに転送される。転送できたらサーバーにログインし、以下のようにコマンドを実行してゆく。

$ cd
$ mkdir .ssh
$ chmod 700 .ssh
$ mv id_rsa.pub .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys

ユーザーのHOMEに.sshディレクトリーを作成し、その中に公開鍵をauthorized_keysという名前で配置している。他のユーザーから読み取られないよう、ディレクトリーのパーミッションを700、公開鍵ファイルは600としている。これで公開鍵の準備は完了。

次はいよいよ、SSHの設定変更である。

変更には管理者権限が必要なので、suコマンドでrootになる。ちなみに通常のユーザーと管理者は、プロンプト先頭の文字で見分けられるようになっている(シェルによるのかもしれないが)。プロンプトが$なら通常ユーザー、#は管理者となる。

$ su -
Password:
#

次に/etc/ssh/sshd_configを編集する。viコマンドで設定ファイルを開く。

# vi /etc/ssh/sshd_config

ファイルを開いたら、PermitRootLogin(rootのログイン)とPasswordAuthenticatin(パスワードによるログイン)をnoに設定する。書式は設定名の後にyesで有効、noで無効、行頭に#でコメントアウトとなる。例えば、以下のように書く。

#PermitRootLogin yes
PermitRootLogin no

...中略...

#PasswordAuthentication yes
PasswordAuthentication no

編集して保存したら、SSHデーモンを再起動する。

# service sshd restart
Stopping sshd:                             [ OK ]
Starting sshd:                             [ OK ]

設定に誤りがあれば、コマンド実行時にエラーメッセージが表示されるので修正する。ここまでの手順がすべて適切ならば、以降はパスワードログインが禁止され、秘密鍵の参照が必須となる。 ただし、VPSコントロールパネルのコンソールではSSHのパスワードによるログインを禁止していても、関係なくログインできるので気をつけてください。

設定が完了したら、sshで接続をする。

$ ssh xxxx@xxx.xxx.xxx.xxx -p 22

接続をするとパスワードをきかれるので、ssh-keygenコマンドを実行したときに設定したパスワード入力して接続を行う。接続するとローカルの.ssh以下に鍵ができている。

xxxx:.ssh xxxx$ ls
id_rsa      id_rsa.pub  known_hosts

参考サイト:さくらのVPS を改めて使いはじめる 1 – 使用準備、SSH 公開鍵認証