ksaitoの日記

日々試したことの覚え書き

keychain

前にOpenSSHでパスワードなしでログインする方法を書きました。
パスワードなしの鍵束を作る方法ですが、もっと安全で便利なkeychainを使う方法がありました。
ssh-keygen -pですぐにパスワードを付けて、この方法に切り替えましょう。
前回の記事でauthorized_keysを作るところまでは、一緒でパスフレーズは設定したあとにkeychainを使います。

keychainのインストール

$ sudo aptitude install keychain
[sudo] password for ksaito:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
Reading state information... 完了
拡張状態情報を読み込んでいます
パッケージの状態を初期化しています... 完了
タグのデータベースを構築しています... 完了
以下の新規パッケージがインストールされます:
  keychain
0 個のパッケージを更新、 1 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
33.1kB のアーカイブを取得する必要があります。 展開後に 156kB のディスク領域が新たに消費さ れます。
拡張状態情報を書き込んでいます... 完了
取得:1 http://jp.archive.ubuntu.com gutsy/universe keychain 2.6.6-1 [33.1kB]
33.1kB を 0s 秒でダウンロードしました (168kB/s)
未選択パッケージ keychain を選択しています。
(データベースを読み込んでいます ... 現在 118075 個のファイルとディレクトリがインストールされています。)
(.../keychain_2.6.6-1_all.deb から) keychain を展開しています...
keychain (2.6.6-1) を設定しています ...

パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
Reading state information... 完了
拡張状態情報を読み込んでいます
パッケージの状態を初期化しています... 完了
拡張状態情報を書き込んでいます... 完了
タグのデータベースを構築しています... 完了
$

keychainの設定

keychainを実行するとkeychainを使うために必要な環境変数を設定するファイルを~/.keychainに作成します。
引数に指定した秘密鍵パスフレーズを入力するとssh-agentが起動します。
.keychainに生成されたファイルには、SSH_AUTH_SOCKとSSH_AGENT_PIDという環境変数が設定されます。
sshは、環境変数に設定されたssh-agentから秘密鍵パスフレーズを聞くのでパスワードの入力を求められません。

$ keychain ~/.ssh/id_rsa

KeyChain 2.6.6; http://www.gentoo.org/proj/en/keychain/
Copyright 2002-2004 Gentoo Foundation; Distributed under the GPL

 * Initializing ~/.keychain/debian-sh file...
 * Initializing ~/.keychain/debian-csh file...
 * Initializing ~/.keychain/debian-fish file...
 * Starting ssh-agent
 * Adding 1 ssh key(s)...
Enter passphrase for ~/.ssh/id_rsa:
Identity added: ~/.ssh/id_rsa (~/.ssh/id_rsa)

$ source ~/.keychain/`hostname`-sh
$ ps x | grep ssh-agent
14801 ?        Ss     0:00 ssh-agent
14832 pts/0    S+     0:00 grep ssh-agent
$ ssh debian10 hostname
debian10
ksaito@ubuntu:~$
$
$

.bash_profileへの設定

.bash_profileに設定するとパスワードの入力は、求められなくなります。
マシンがリブートされたときには、再度、keychainを実行する必要がありますが、パスワードなしの鍵束よりセキュアです。

$ grep keychain .bash_profile
source ~/.keychain/debian10-sh
$ hostname
debian10
$ ssh ubuntu hostname
ubuntu
$

keychainのクリア

clearオプションでメモリ上のパスフレーズをクリアすることができます。

$ keychain --clear

KeyChain 2.6.6; http://www.gentoo.org/proj/en/keychain/
Copyright 2002-2004 Gentoo Foundation; Distributed under the GPL

 * Found existing ssh-agent (14801)
 * ssh-agent: All identities removed.

$ ssh ubuntu hostname
Enter passphrase for key '~/.ssh/id_rsa':
ubuntu
$