「さくらのVPS」などのVPSサーバに公開鍵認証でMac OS Xからログインする設定

WordPressの普及が進むと共に懸念され続けているのが「アクセス速度」と「サーバへの負荷」。私も常に悩んでいるこの2つ。
解決策がいろいろと出揃ってきた感じですが、その中の一つが「VPSサーバに自分でサーバを立てる」です。
以前よりも随分と安価にVPSサーバがレンタル出来るようになった反面、セキュリティ的に弱いサーバが増えてきたのも事実。
自分のサーバがやられないために、まずは公開鍵認証を行いましょう、というわけで、覚え書きも兼ねて記事にします。

今まで何度もこの手の設定はやってきたのですが、全く記憶できないんですよね。記憶する気がない、とも言えますが。
その都度、検索かけるのも面倒なので、自分で記事にしておくことにしました。
SplitShire_IMG_4644

構成

私の場合は下記の通りです。
・Mac OS X : 10.9ですが、古いOS Xでも同じ手順で大丈夫だと思います。
・iTerm : ターミナルソフトです。標準の「ターミナル」でも一部を除いて大丈夫です。
・Linux : サーバ側はLinuxを使います。ディストリビューションは特に指定しなくても大丈夫だとは思います。
     私は「Scientific Linux」か「CentOS」を主に使います。

Mac OS X側で公開鍵を生成する

まずは公開鍵を生成します。
[bash]$ ssh-keygen
enerating public/private rsa key pair.
Enter file in which to save the key (/Users/xxxx/.ssh/id_rsa):※ファイル名や保存先の変更を行う場合は入力します
/Users/xxxx/.ssh/id_rsa already exists.※私の場合、以前生成したファイルが残っていたのでこのメッセージです。
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):入力しない方がいいです
Enter same passphrase again:入力しない方がいいです
Your identification has been saved in /Users/xxxx/.ssh/id_rsa.
Your public key has been saved in /Users/xxxx/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx xxxx@yyyyyyyyy.local
The key’s randomart image is:
以下、イメージが表示されます。[/bash]
これで”/Users/ユーザ名/.ssh/”に公開鍵と秘密鍵が生成されていると思います。
試しにlsで見てみると
[bash]$ ls /Users/ユーザ名/.ssh/
id_rsa   id_rsa.pub[/bash]
という2つのファイルがあるかと思います(場合によってはもう一つ”known_hosts”というファイルもありますが、こちらは無視しておいて下さい)。
“.pub”が付いている方が「公開鍵」です(“Public”の”pub”と覚えて下さい)。ということは、付いてない方が「秘密鍵」です。

公開鍵をLinuxサーバへセット

インストールしたばかりのLinuxサーバには鍵を置くためのディレクトリがないと思いますので、作っておきます。
ターミナルやiTermを使って、sshでログインして、下記手順でディレクトリを生成しておきます。
[bash]$ cd ~
$ mkdir .ssh
$ chmod 700 .ssh[/bash]
最後の一行で必ずパーミッションを変更しておきます。
ここでよく”scpなどでファイル転送”を行うように説明してあるサイトが多いのですが、Linuxサーバにsshでログインしていればそういうことをする必要はありません。
Mac OS X側で公開鍵の内容を表示します。
[bash]$ cat id_rsa.pub
ssh-rsa ………………………..[/bash]
“cat”コマンドで公開鍵の内容を表示し、表示された内容をMac OS X上でコピーします(マウスなどで範囲指定して[CMD]+[c][/c]キーでコピー)。
次にLinuxサーバにコピーした文字列をペーストします。
[bash]$ vi .ssh/authorized_keys[/bash]
“vi”が起動したら、”:”+[ESC]-[a]でINSERTモードにして[CMD]+[v}でペーストします。[ESC]でINSERTモードを抜けて、[SHIFT]+[Z]+[Z]で保存します。
生成したauthorized_keysのパーミッションを変更しておきます。
[bash]$ chmod 600 .ssh/authorized_keys[/bash]

LinuxサーバのSSH設定を変更する

Linuxサーバ側のSSH設定を変更するために”/etc/ssh/sshd_config”ファイルを編集します。
[bash]PermitRootLogin yes

PermitRootLogin without-password[/bash]
このように設定を書き換えることで、rootログインの時にはパスワード認証が使えない、という状態になります。
rootユーザ以外でもパスワード認証を使わず、公開鍵認証にする場合は下記を書き換えます。
[bash]PasswordAuthentication yes

PasswordAuthentication no[/bash]
書き換えたらsshを再起動します。
[bash]$ service sshd restart[/bash]

出来ればsshのポート番号も変更しておきましょう

セキュリティを考えた時にもう一つやっておいた方がいいのがsshポートの変更です。
意外と簡単なのでやってみましょう。
ここでは22番ポートから10022番ポートへ変更する方法を書いていきます。
“/etc/ssh/sshd_config”ファイルを書き換えます。
[bash]#Port 22

Port 10022[/bash]
最初の”#”を除去し、”22″を変更するポート番号”10022″へ書き換えます。
ポート番号を変更したので、ポートを空ける必要があります。
“/etc/sysconfig/iptables”を変更します。
[bash]*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT – [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp –icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 10022 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT –reject-with icmp-host-prohibited
COMMIT[/bash]
今回は、念のため”22″を残した状態で”10022″のポート開放を追加してみました。
(22番ポート開けていてもsshd_configで塞いでるのでどうなるものでもないのですが・・・)
sshとiptablesを再起動します。
[bash]$ service iptables restart
$ service sshd restart[/bash]

この設定を踏まえて、iTermのProfileを登録する

ここまでの設定を踏まえて、iTermにProfileを登録しましょう。
[bash]ssh -p 10022 -i /Users/xxx/.ssh/id_rsa root@IPアドレス[/bash]
これでiTermからプロファイル選択すると一発ログイン出来ます。
もし公開鍵生成の時にパスフレーズを入力していた場合、iTermでログインするときにパスフレーズの入力を求められます。
ちなみに私の場合、サーバ毎に秘密鍵を作りますので、保存場所はもちろん、ファイル名も変更しています。

他にもやり方はいくつかあります

ここに書いた方法は少々面倒な方法かもしれません。
もう少し簡単な方法や、実際のログイン時の設定などは他にもあります。
その辺りは調べてみて頂ければ幸いです。
[tmkm-amazon]B00ENEGXUU[/tmkm-amazon]

Share this post