「パスワード認証はやめましょうね」の巻

外に開いているサーバでsshのポートを開けていると、「/var/log/secure」のログを見ればわかるように、色々な人がsshでログインしようとしていることが伺えます。

ログインができたら、もうそれはサーバーを乗っ取られたということに等しいわけで、危険です。もしかしたらパスワードをランダムでログインしようとして、いつかは成功してしまうかもしれないからです。しかし、秘密鍵やら公開鍵を作った方が良いだろうけれど、面倒なのでパスワード認証でやっている、というサーバもありそうです(今時あまりないでしょうが、開発用の試験サーバのような暫定的な場合は結構ありそうです)。↓はsecureログの例(3秒に1回ぐらいアクセスしている・・・)。

pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=112.65.244.xxx  user=root

そこで、今回は「ほうら、sshの公開鍵方式はこんなに簡単ですよ」という話をしてみます(iptablesでアクセスできるipを絞るというようなことも可能ですが、ここでは省略)。とりあえず環境的には、ローカルはMacBook Air(Marvericks)、サーバはCentOS6.2(アドレスは「www.yyy.org」)です。

ざっくり、やることは4つだけ
  1. ローカルで公開鍵と秘密鍵を作成する(1コマンド)。
  2. サーバに公開鍵を持っていく(ログインしたいユーザの「~/.ssh/authorized_keys」に追加します(新規の場合は作成します)。
  3. サーバのsshdの「パスワード認証を使えないように」設定を変えて、sshdをリスタートする。
  4. ログインしてみる。

これで終了です。さて、具体的に見ていきます。

ローカル(Mac)でRSA鍵の作成
  1. SSH2では(もう通常はSSH2でしょう)DSAとRSAが使えますが、とりあえずRSAの公開鍵・秘密鍵を作成します。
ssh-keygen -t rsa

をMacターミナル上で上記を実行します。すると、

Enter file in which to save the key (/Users/xxx/.ssh/id_rsa):

と聞いてきます。すでにある場合は上書きされちゃうので変更する必要がありますが(一応上書きするよって聞いてくるので、心配ありません)、初めてなら、そのままリターン。

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

で2度パスフレーズを入れたら、出来上がり。

Your identification has been saved in /Users/xxx/.ssh/id_rsa.
Your public key has been saved in /Users/xxx/.ssh/id_rsa.pub.

が作成されます。上が秘密鍵、下が公開鍵です。

ローカルでは、一応念のため「.ssh/config」に(なかったら新規にファイルを作って)

IdentityFile ~/.ssh/id_rsa

を書き込んでおきます。

サーバに公開鍵を置く

公開鍵なので、あまり神経質になる必要はありませんが、サーバにscpあたりで「id_rsa.pub」を転送しましょう。

scp ~/.ssh/id_rsa.pub xxx@www.yyy.org:/home/xxx

そして、とりあえず今回まではサーバにパスワード認証で入ります。

そして、↑でホームディレクトリに「id_rsa.pub」を転送したので、これを~/.ssh/authorized_keysに追記します(初めてなら新規に作成、今回は初めてなので新規に作ります)。

mkdir .ssh
mv id_rsa.pub .ssh/authorized_keys
chmod 600  .ssh/authorized_keys

そして、ローカルにある「id_rsa.pub」は通常いらないので、削除してしまいましょう。

sshdの設定変更

sshdの設定ファイルは「/etc/ssh/sshd_config」なので、これを修正します。

※「PasswordAuthentication no」は、鍵を使ってログインできることを確認してから、変更した方が無難かもしれません

Protocol 2
PermitRootLogin no #念のため
RSAAuthentication yes
PubkeyAuthentication yes
PermitEmptyPasswords no
PasswordAuthentication no

とします。そしてsshdをリスタート

/etc/init.d/sshd restart
ログイン確認
ssh xxx@www.yyy.org

でログインしようとすると、Macでは下のようなポップアップが出てきます(初めて見たときは驚きます!)。

sshmac

最初に鍵を作ったときのパスフレーズを入力すると、ログインできます。

そして、次からはパスフレーズを聞かれなくなります。

※これだとノートパソコンをどこかに忘れたりすると危険ということもあり、上記の鍵方式に加え、やはり「iptables」でIPアドレスを絞る方が心配ないですね(その分出かけたときに仕事ができませんがw)。

蛇足

この鍵を使ってのsshにすると、コマンドラインでやっている人以外、このままだとscp(WinSCPなど)が使えません。

FileZillaやWinSCPはPuTTY形式では利用できるので、問題なく使えます(FileZillaはFileZilla自身でコンバートしてくれますが、WinSCPは自分で変更する必要がありますので、とりあえずPuTTYをインストールする必要があります)。下のURL等を参考にして下さい。

終わり。

ちく

コメントを残す