1. ssh-keygen コマンドで鍵ペアを作成する
$ ssh-keygen -t rsa
秘密鍵の保存先を聞いてくるので、デフォルトのままEnter。
パスフレーズを2回入力。
すると、以下の鍵ペアのファイルが ~/.ssh/ に作成される。
- id_rsa
- id_rsa.pub
2. SSHサーバに公開鍵を登録する
ユーザのホームディレクトリに1.で作成した公開鍵を転送する。(FTPで転送してもよい。)
$ scp ~/.ssh/id_rsa.pub user@host:
サーバ側で、catコマンドとリダイレクションを使って転送した公開鍵を登録する。(登録するファイルは ~/.ssh/authorized_keys)
$ cat id_rsa.pub >> ~/.ssh/authorized_keys
「~/.ssh」ディレクトリと「~/.ssh/authorized_keys」はオーナーだけに読み書き可能なようにパーミッションを設定する。
$ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/authorized_keys
- クライアント側のユーザのホームディレクトリのパーミッションにも注意する。所有者以外の書込み権を設定してあるとだめ。
たとえば、/home/hogeのパーミッションが777の場合、公開鍵認証でsshログインしようとすると、
Permission denied (publickey,gssapi-with-mic).
というエラーになる。この場合、サーバ側のログ(/var/log/secure)では
Authentication refused: bad ownership or modes for directory /home/hoge
となっていて、/hoem/hogeのパーミッションに問題があるということ。
所有者以外の書込み権を設定してあるとだめ。700、711、755にすればOK。
3. 公開鍵認証方式でログインする
$ ssh -l user host
パスフレーズを聞いてくるので、ssh-keygenコマンドで指定したパスフレーズを入力する。
(接続先サーバのパスワードではないことに注意)
4. クライアント側の設定
id_rsa ファイルをクライアント側にコピーする。
例:
ユーザのホームディレクトリ\.ssh
- 秘密鍵のパーミッションに注意。秘密鍵のパーミッションがopenすぎるとだめ。
以下はmacosxでのエラーの例。@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0640 for '/Users/xxx/.ssh/id_rsa' are too open. It is recommended that your private key files are NOT accessible by others. This private key will be ignored. bad permissions: ignore key: /Users/xxx/.ssh/id_rsa Permission denied (publickey,gssapi-with-mic).
id_rsaを600にすればOK。
- cwRsyncで公開鍵認証を使用する場合は、環境変数HOMEの下の「.ssh」(known_hostsファイルが作成されるディレクトリ)に秘密鍵ファイル(id_rsa)を置く。
例:
HOME=/home/pistolfly
でcygwinがD:\cygwinの場合、
D:\cygwin\home\.ssh
に秘密鍵ファイルを置く。
(rsyncの-eまたは--rshオプションのsshコマンドで-iオプションで秘密鍵のパスを指定してもよい。)rsyncしてパスフレーズの入力を促されたところ
C:\sfprojects\reserve>symfony sync production >> exec rsync --progress --dry-run -azC...s.net:/usr/local/share/reserve/ Enter passphrase for key '/cygdrive/c/Documents and Settings/pistolfly/.ssh/id_r sa':
- TeraTermでは、ログイン時に「RSA/DSA鍵を使う」を選択して、秘密鍵に上記ディレクトリの秘密鍵ファイルを指定して、秘密鍵のパスフレーズを入力する。
5. パスワード認証を許可しないようする
/etc/ssh/sshd_config (サーバ側) を編集する。
PasswordAuthentication yes
を
PasswordAuthentication no
にする。
rootのログインも禁止しておく。
PermitRootLogin no
root権限でsshdをreloadする。(rootでログインしたままで)
$ /etc/init.d/sshd reload
参考:
FedoraCore5ビギナーズバイブル11-2-2
最終回 セキュアなSSHサーバーを構築する:ITpro
リモート接続に SSH を使う
@IT:鍵交換方式のsshでアクセスするには
はじめまして。とても参考にさせていただきました!!
私自身四苦八苦しつつ、その記録をブログに書いています。
メモとしてこちらの記事へのリンクをブログ内で紹介させていただきました。
という、ご報告のコメントをさせていただきます。
もし問題があれば、ご連絡いただければ幸いです。
おー!こちらでさくっと出来ました!
わかりやすかったです
$HOMEのパーミッションは見落としてました