ServersMan@VPSの初期設定(SSH)

前回の続きです。

ルートのパスワード変更

念のためパスワードを変更する。

sudo passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

作業用の一般ユーザの追加

ルートで作業をし続けるのは誤操作時に危険ですし、SSHでログインするときにrootは使いたくないので、作業用に一般ユーザを作成。

これはadduserコマンドで簡単できる。下記はユーザfooを作成している例。

sudo adduser foo

このユーザにsudoコマンドでルート権限で作業ができるようにする。
sudoの設定ファイルを書き換えるには専用のvisudoコマンドを使用する。

sudo visudo

このコマンドでは/etc/sudoersというファイルを変更できるので、下記の行を追加する。

foo    ALL=(ALL) ALL

SSHの設定

いよいよSSHの設定を変更する。方針は、SSH経由でrootとしてログインできることの禁止と、認証方式を公開鍵方式に変更すること。

これはユーザ名をrootとしてアタックしてくる連中から防御するのと、リモートアクセス用のパスワードがバレてもアクセスできる人を限定するため。

SSH経由のrootログインの禁止

これは/etc/ssh/sshd_configを変更するだけなので簡単。viコマンドを使ってsshd_configに下記の2行を追記する。もちろんfooのところは作成した自分のユーザ名にする。

PermitRootLogin no
AllowUsers foo

そして、この設定を範囲させるためにSSHサーバを再起動。

sudo /etc/init.d/ssh restart
再起動完了後は、今まで作業していたSSHのシェルはそのままにしつつ、ちゃんとユーザfooでSSH経由でログインできるかどうかを確認すること。
そしてfooでログインがsudoコマンドでrootに成れることを確認すること。

これは、この時点ですでにSSH経由でrootとしてログインできなくなてしまうため。何かに失敗したらそのままにしていたSSHのシェルのほうで、設定を修正しましょう。

鍵認証を使ったSSH接続(VPS側の準備)

2015/04/10 追記
秘密鍵と公開鍵の扱いについては本ページの記述には間違いがあります。
訂正版は下記になります。

http://scratchpad.jp/ssh-public-key-authentication/

公開鍵と秘密鍵のペアを作ることにより、鍵ファイルを持っていない人からのアクセスを防ぐことができます。逆に、ネットカフェなどの鍵ファイルがない環境ではVPSにアクセスできなくなります。
自分の使用パターンにあわせて、パスワード認証にするのか、公開鍵を使った認証にするのかを決めましょう。私は、利便性より安全性をとり、公開鍵暗号方式を導入しました。

公開鍵方式のポイントは、公開鍵と秘密鍵を1ペア作成し、SSHサーバ側(今回はVPS)に公開鍵を保管し、SSHクライアント側(今回の場合はputtyを動かしているWindows PC)に秘密鍵を保管する点です。

今回は、VPS側で公開鍵と秘密鍵のペアを作成して、秘密鍵をWindows PC側に転送しました。逆に、Windows PCで鍵のペアを作成し、VPSに公開鍵を転送する方法もあります。

VPS側で鍵のペアを作成するには、ユーザfooでssh-key-genコマンドを実行します。
rootではログインできないのでroot用の鍵ペアを作っても意味がありません。必ず、作成した一般ユーザでログインしてから実行してください。

ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/foo/.ssh/id_rsa):
Created directory '/home/foo/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/foo/.ssh/id_rsa.
Your public key has been saved in /home/foo/.ssh/id_rsa.pub.
...

途中でパスフレーズの入力を求められます。作成する秘密鍵を守るためのものです。
(パスフレーズは無しにもできます)

特に問題がなければ、ユーザfooの.sshディレクトリに、id_rsa.pubとid_rsaというファイルができます。
id_rsa.pubが公開鍵、id_rsaが秘密鍵になります。

この公開鍵・秘密鍵のペアをつかってログインできるように、公開鍵id_rsa.pubをauthorized_keysに追加します。

cd ~/.ssh
ls
id_rsa  id_rsa.pub
cat id_rsa.pub >> authorized_keys
ls
authorized_keys  id_rsa   id_rsa.pub

ついでに、次の処理に必要なので、秘密鍵を表示しておきます。

cat id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: ...

.....
-----END RSA PRIVATE KEY-----

鍵認証を使ったSSH接続(Linuxがクライアントの場合)

何かと簡単なので、まずはLinuxをクライアントしてためしてみます。
まず、VPS側にある秘密鍵id_rsaを何とかしてLinux側にコピーする。秘密鍵をコピーするって時点で若干?だが・・・
一番簡単なのはVPS側で表示した秘密鍵をコピペすること。テキストなのでこれでOK。コピペして作成した秘密鍵のコピーは.sshディレクトリにvps-keyという名前で置いておく。パーミッションを600にする必要もあり。

chmod 600 .ssh/vps-key

あとはsshコマンドでログインできることを確認。

ssh -i .ssh/vps-key foo@VPSのIPアドレス -p sshのポート番号

ServersMan@VPSではsshのポート番号は3843になっていて、デフォルトの22ではないので-pによる指定が必要があります。

これでログインできればOK。

鍵認証を使ったSSH接続(Windows上のputtyがクライアントの場合)

puttyはopenssh形式の鍵がそのまま読めないので、変換する必要があります。この変換にはputtyについてくるputtygen.exeを使用します。

まず、Linuxをクライアントにする場合と同様に、秘密鍵をコピペしてWindows上にファイルとして保存します(vps-keyとします)。
ここでputtygen.exeを起動して、「変換メニュー」→「鍵のインポート」を選択して、作成したvps-keyを選択。

正常に読み込まれたら「ファイル」→「秘密鍵の保存」でPuTTY形式(?)の秘密鍵ファイルとして保存します(vps-key.ppkとします)。

なお、VPS側で作成した秘密鍵がAES方式のとき(DEK-Infoの行がAESで始まっている場合)は、puttyに付属するputtygen.exeで変換できません。
そんなときはWinSCPをインストールしてください。WinSCPにもputtygen.exeがついてきて、このバージョンではAES方式も変換できます。

putty形式の秘密鍵が用意できたら、puttyのセッションの設定を修正します。
VPSに接続するセッションの設定で、「接続」→「データ」の「自動ログインのユーザ名」をVPSでのユーザ名(foo)に、「接続」→「SSH」→「認証」の「認証のためのプライベートキーファイル」を作成したputty形式の秘密鍵ファイル(vps-key.ppk)にします。
もちろん、セッションの基本設定でポート番号と接続タイプを帰ることを忘れないように。

これで接続を開始して、puttyのウィンドウに

Using username "foo".
Authenticating with public key "vps-key-openssh-key"
Passphrase for key "vps-key-openssh-key":

と表示されたら、ssh-keygenを実行したときに入れたパスフレーズを入力する。

これでログインできればOK。

SSH接続に鍵認証を必須にする

鍵認証を必須にすることで秘密鍵を持っていない人のログインを禁止にでき、セキュリティを高めることができます。
しかし、秘密鍵がないPCからはログインできなくなるので、その辺は不便かも。

この制限を加えるためにはVPS側にログインしてSSHサーバ側の設定を変えます。
変更は/etc/ssh/sshd_configの下記の行の先頭の#をはずすだけです。

AuthorizedKeysFile      %h/.ssh/authorized_keys

忘れずにSSHサーバを再起動します。

sudo /etc/init.d/ssh restart

まとめ

これで安全に自宅からServersMan@VPSに接続できるようになりました。次回はDebianの設定を調整します。