Buno Journals

It's what I do that defines me.

ssh公開鍵認証の設定

Webに溢れている情報ではあるがメモしておく。 ssh通信時にパスワード入力が不要になる。

SSH鍵ペア作成

ssh接続元の環境で、

~/.ssh/id_rsa, id_rsa.pub が存在しないなら

ssh-keygen

で公開鍵、秘密鍵を制せする。パスフレーズを入力が求められる。

公開鍵をリモートマシンに設置

scp ~/.ssh/id_rsa.pub user_name@host_name:~

リモートマシンにログインして.ssh/authorized_keysに公開鍵を書き込む。 モードの設定も適切に。

mkdir -p -m 700 .ssh
cat id_rsa.pub >> .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
rm id_rsa.pub

認証エージェント(ssh-agent)に秘密鍵を覚えさせる

ssh-agentはOSX, Ubuntuの場合、OSにログインした時から常駐している。 起動させるには

eval `ssh-agent`

ssh-addコマンドで、ssh-agentに秘密鍵を覚えさせる。 コマンドを実行すると秘密鍵を解くためのパスフレーズ入力を求められる。 以上設定すると、以後、sshリモートホストにログインする際にパスワード入力が不要になる。

期待通り動作しない場合は、.sshディレクトリの所有権やモードが正しいか調べてみる。

リモートホストのユーザ認証関連のログを調べてみるのも良い。

安全のためにPCの前から離れる時はssh-add -Dで全ての秘密鍵を忘れさせると良い。

SSHクライアントの設定ファイル(~/.ssh/config)

Host example.com
  User your_name
  Port 22  # デフォルト22なのでこれは書かなくても良いが

Host *
  ForwardAgent yes
  ServerAliveInterval 300

ForwardAgentをyesにすると、リモートホストから更に別のリモートホストに接続、を繰り返しても認証エージェントを引き継げる。リモートホストには公開鍵を設置しておけば、秘密鍵を設置する必要はない。

ServerAliveIntervalSSHクライアントからリモートホストに返答を要求するメッセージを送る感覚を指定する(秒単位)。デフォルトは0で、メッセージは送られない。ネットワーク環境によりssh接続が切れやすい場合、設定しておくと良い。

参考書籍

Ruby on Rails環境構築ガイド, 黒田努, 2013

Ruby on Rails環境構築ガイド

Ruby on Rails環境構築ガイド