SSHで公開鍵認証を使う

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でアクセスするには

「SSHで公開鍵認証を使う」への2件のフィードバック

  1. はじめまして。とても参考にさせていただきました!!
    私自身四苦八苦しつつ、その記録をブログに書いています。
    メモとしてこちらの記事へのリンクをブログ内で紹介させていただきました。
    という、ご報告のコメントをさせていただきます。
    もし問題があれば、ご連絡いただければ幸いです。

  2. おー!こちらでさくっと出来ました!
    わかりやすかったです
    $HOMEのパーミッションは見落としてました

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください