ssh接続時にssh-agentを利用してパスフレーズの入力を省略する

ssh接続時にssh-agentを利用してパスフレーズの入力を省略する

対象環境

  • CentOS: 6.4

ssh接続時に求められるパスフレーズの入力は、ssh-agentkeychainを使うことで省略することが可能です。

ssh-agentで対応する

ssh-agentは、鍵を管理してくれるデーモンです。

ssh-agentの起動

以下のコマンドでssh-agentを起動します。

[hoge@server ~]$ eval `ssh-agent`
Agent pid 3952

起動したssh-agentのPIDが表示され、ssh-agentが起動します。

以下のようにpsコマンド起動しているのを確認できます。

[hoge@server ~]$ ps aux | grep ssh-agent
hoge       3952  0.0  0.0  55524   720 ?        Ss   03:20   0:00 ssh-agent

evalでssh-agentを実行する理由

evalでssh-agentを実行すると以下のようにssh-agent実行時に標準出力に出力される以下のコマンドが実行され、
ssh-agentを使用する際に必要な環境変数がセットされます。

[hoge@server ~]$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-uhDmmA3955/agent.3955; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3956; export SSH_AGENT_PID;
echo Agent pid 3956;

evalを付けないとこの環境変数がセットされないのでssh-agentが立ち上がるだけで、ログインしている
ユーザから使うことができません。

以前にssh-agentの仕組みがわからずログインのたびに毎回ssh-agentを実行していたため、
たくさんのssh-agentが立ち上がっていた環境を見たことがあります。
立ち上げたssh-agentはログアウトしても残りますので、前回立ち上げたssh-agentを放置して
毎回ssh-agentを立ち上げているとそのようになってしまいます。

これを防ぐためにはログイン時にSSH_AUTH_SOCKを設定するように.bash_profileなどにssh-agent実行時に
出力された文字列を設定すれば、毎回ssh-agentを起動する必要はなくなります。

.bash_profile

SSH_AUTH_SOCK=/tmp/ssh-enzymr4028/agent.4028; export SSH_AUTH_SOCK;

この場合、立ち上がっているssh-agentが止まってしまって別のssh-agentを立ち上げた場合や
OSを再起動した場合には当然無効になるので再度設定する必要があります。

keychainで対応する

パスフレーズ入力を省略するためには、ssh-agentで対応する方法の他にkeychainを使うという方法もあります。

keychainのインストール方法

keychainをCentOS6.4で試したところyumからインストール出来ませんでした。
そのような場合には以下のようにしてインストールできます。

yum-prioritiesインストール

通常のパッケージではkeychainがインストール出来ないため、リポジトリの追加を行うのですが、
その場合に通常パッケージが上書きされないようにyum-prioritiesをインストールします。

yum -y install yum-priorities
yum -y install yum-plugin-priorities

RPMforgeリポジトリの追加

rpmforgeをダウンロードしてインストールします。

wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
rpm -Uvh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

キーのインストール

wget http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
rpm --import RPM-GPG-KEY.dag.txt

keychainのインストール

yumでkeychainをインストールします。
先ほど設定したrpmforgeはインストール直後は無効になっていると思うので、
--enablerepo=rpmforgeのオプションをつけます。

[hoge@server ~]# yum --enablerepo=rpmforge install keychain

keychainを使う

以下のように.bash_profileに設定してログイン時にkeychainを立ち上げるようにします。

eval `keychain --eval --agents ssh`

evalが2つ重なっていますが、これはssh-agentと同じようにkeychainも–evalオプションを付けることで`SSH_AUTH_SOCK`を出力してくれるので、
それをevalで実行して設定という意味です。

あとはkeychainコマンドで鍵を登録すれば完了です。

[hoge@server ~]$ keychain /home/www/.ssh/id_rsa

TAG

  • このエントリーをはてなブックマークに追加
金子 将範
エンジニア 金子 将範 rubyist

新しいことや難しい課題に挑戦することにやりがいを感じ、安定やぬるい事は退屈だと感じます。 考えるより先に手が動く、肉体派エンジニアで座右の銘は諸行無常。 大事なのは感性、プログラミングにおいても感覚で理解し、感覚で書きます。