2013年4月10日水曜日

sshを公開鍵暗号方式で接続できるようにする

いまさら書くネタでもないのですが、今日ひさびさに設定しようとしたらハマりました。
自分が過去にまとめたwikiに書いといた情報で解決できたので、まとめます。

SSH の公開鍵認証とは

公開鍵暗号方式は...Wikipediaでも読んで下さいw
ヒマなときにでも書き足します。


SSH環境の構築

SSHサーバとSSHクライアントの設定方法をまとめる。
他サイトを読んでて分かりにくかったのが、「どのマシンで何ファイルの設定をしているか」ということ。そこを分かりやすくまとめます。
説明の前に用語を定義。

  • SSHサーバ:SSHで接続先マシン。Unix系なら「sshd」が動作してる環境。
  • SSHクライアント:SSHで接続元マシン。Windowsだと「Tera Term」とか「Putty」とか、Unix系なら「ssh」コマンドを実行する環境。

また、今回はSSHサーバSSHクライアントともにUnix系マシンを前提にします。なので
SSHサーバは「sshd」、では「ssh」を使います。(OSはSSHサーバがCentOS、SSHクライアントがMac OS Xです)

まず、SSHサーバの設定ファイル(sshd_config)を更新する。
Centosでは「/etc/ssh/sshd_config」にあります。

PasswordAuthentication no # パスワードではなくカギでログインする
PermitEmptyPassword no # パスワードなしのログインは許可しない

次に、SSHサーバで鍵を作成するコマンドを実行します。
こんな感じで出力される。ここで入力するパスフレーズは、SSHクライアントからssh接続するときに使うので覚えておくように。
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.


次に、SSHサーバで公開鍵の名前を変更します。
# mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys 

次に、SSHサーバの秘密鍵(id_rsa)をSSHクライアントの~/.sshディレクトリに格納する。
(例えばscpコマンドを使う例。ユーザー名がhogehogeでマシンのIPアドレスが192.168.1.10)
# scp ./ssh/id_rsa hogehoge@192.168.1.10:/Users/hogehoge/.ssh

次に、SSHサーバの秘密鍵の権限を600、.sshディレクトリを700に変更
# chmod 600 .ssh/id_rsa
# chmod 700 .ssh

これで準備完了。SSHクライアントで以下コマンド実行すると、パスフレーズを入力するダイアログが出てくる。入力してOKボタンを押せば接続される。
$ ssh root@192.168.1.1