wsl2なdebianの起動時にssh-agentを動かしておく

wsl2debianssh-agentが起動してないのでログイン時に起動するようにする。

基本的な使い方

ssh-agenetの起動方法は、

$ eval $(ssh-agent)
ssh-agentのPIDがechoされる

という感じになっているので、これを~/.bashrcなどに追記する。

どこかの記事に書いたかもしれないが、このssh-agentがないと、ssh-addで秘密鍵のパスフレーズを省略できない。毎回手動でこれを動かすのはしんどいので、~/.bashrcに記述してシェル起動時に自動で実行してもらう。

.bashrcに記述

しかし~/.bashrcなどの実行時に標準出力に何か出力するのはよろしくない。 そのままではechoでPIDを標準出力してしまう。 なので、1>/dev/nullをつけておいて、標準出力は捨てる方針にする。

つまり、こうなる:

# ~/.bashrc
if [ -z "${SSH_AGENT_PID}" ]; then
    eval $(ssh-agent) 1>/dev/null
fi

あまり意味はないが、環境変数SSH_AGENT_PIDがあるときは何もしない。これがあれば既に起動しているから。(シェル起動時なのでまず該当しないが)。

.bash_logoutにも記述

上のままだと、ssh-agentはシェルの終了後も残るので、シェルの終了時にkillする。

そのため、~/.bash_logoutに以下を追記してログアウトの時にssh-agentを終了するようにする。

# ~/.bash_logout
if [ -n "${SSH_AGENT_PID}" ]; then
    eval $(ssh-agent -k) 1>/dev/null
fi

一応標準出力は捨てておく。こちらもあまり意味はないが、環境変数SSH_AGENT_PIDがなければ何もしないようにしている。

おわり

この起動と終了の仕方はdocker-machine envdocker-machine env --unsetに通じるものがある。割とよくある起動形態なんだろう。

ssh-addも自動化させる手もある。~/.bashrcの末尾の方にssh-add id_rsaなどを追記すればパスフレーズは聞かれるが自動化できる。使ってみると意外と便利だった。でもこれは標準出力してるから良くない気がする。

ターミナルでexitしたときの終了コードが1や2であることが少し気になるが、上でやったことは恐らく関係ないのだと思う。

以上です。


広告

実践 bashによるサイバーセキュリティ対策 ―セキュリティ技術者のためのシェルスクリプト活用術 | Paul Troncone, Carl Albing, 高橋 基信 |本 | 通販 | Amazon
AmazonでPaul Troncone, Carl Albing, 高橋 基信の実践 bashによるサイバーセキュリティ対策 ―セキュリティ技術者のためのシェルスクリプト活用術。アマゾンならポイント還元本が多数。Paul Troncone, Carl Albing, 高橋 基信作品ほか、お急ぎ便対象商品は当日お届けも...
タイトルとURLをコピーしました