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

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

記事更新

  • 2022/2: インストールを追記。誤字修正。

インストール

真っ白なdebianには、ssh関連のツールが入っていないことに気付いたのでその導入も記録しておく。

Windows付属のssh-agent.exeなどは権限設定がややこしそうなので使わない。(whichで確認できるパスからして使いづらそう。) なお、普通にこれを使おうとすると、permission for "keyname " are too openのエラーがchmod 600しても直らない。Windows側から見ると権限が異なるのだろう。

debian上でインストールする:

$ sudo apt update
$ sudo apt install openssh-client

sshクライアントとして使うだけならこれで十分。

基本的な使い方

ssh-agentの起動方法は、

$ 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であることが少し気になるが、上でやったことは恐らく関係ないのだと思う。

以上です。


広告

Bitly
タイトルとURLをコピーしました