10月 6th, 2008 admin 
・サーバのセキュリティを向上のため
・rsyncやRubyのスクリプトなどからパスワードなしでログインするため
・「/秘密のファイル/開くな.txtを開いてコピー&ペースト」をやめるため
の公開鍵認証をするためのメモです。
手順
sshで公開鍵認証をやりたいときにやること
(1)公開鍵と秘密鍵をつくる
(2)公開鍵をリモートに置く
作業
(1)公開鍵と秘密鍵をつくる
まずはローカルで公開鍵と秘密鍵を作ります。
CODE:
-
$ ssh-keygen -N "" -t rsa
Nはパスフレーズの指定。今回は空にします(セキュリティはその分低下します*1)
tは鍵の種類を選ぶもの。rsa1,rsa,dsaから選べるが最近は強度が高いrsaを選ぶことが多い
上記のコマンドを実行すると$HOME/.sshに
・id_rsa(秘密鍵)
・id_rsa.pub(公開鍵)
が作られる。
(2)公開鍵をリモートに置く
リモートに公開鍵を登録するにはssh-copy-idというそれ専用のコマンドがある
CODE:
-
ssh-copy-id toyoshi@remote_hostname
これでauthorized_keysに勝手に登録してくれます。便利!
もしくはSPCを使います。SCPコマンドは
"scp 送りたいファイル名 ユーザ名@ホスト名:ディレクトリ"
って感じで。
CODE:
-
$ cd .ssh/
-
$ scp id_rsa.pub toyoshi@remote_hostname:directory
んでリモートの$HOME/.sshにauthorized_keysという名前で保存する。
すでにauthorized_keysがある場合は追記するようにする。たとえばこんな感じ
CODE:
-
$ cat id_rsa.pub>> .ssh/authorized_keys
リモートにおいたauthorized_keysはパーミッションを600とかにしておきましょう。
※ssh-copy-idを使った場合は追記の処理とパーミッションの変更は自動でやってくれます。
まとめ
これで
とかってやると、IDとパスワードの入力はもちろん、秘密鍵のパスフレーズも聞かれずにログインできるようになった。
*1・・・パスフレーズはなしにするが、パスワード認証とは違い秘密鍵のファイルが盗まれない限り大丈夫なので実際には安全性にそれほど差はないと思う。心配な場合はリモートの公開鍵にcommand="" というのを追加して公開鍵認証してきたユーザができることを制限する方法が「rsync + cron + ssh (rsyncd を立てない編)」では紹介されています。そのほかにも「ssh scp sftp の正しい自動実行方法」なども参考になります。
参考サイト
rsync + cron + ssh (rsyncd を立てない編)
ssh scp sftp の正しい自動実行方法
公開鍵暗号でのsshリモートログイン - 別館 子子子子子子(ねこのここねこ)