wsl2のdebianでssh-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 envとdocker-machine env --unsetに通じるものがある。割とよくある起動形態なんだろう。
ssh-addも自動化させる手もある。~/.bashrcの末尾の方にssh-add id_rsaなどを追記すればパスフレーズは聞かれるが自動化できる。使ってみると意外と便利だった。でもこれは標準出力してるから良くない気がする。
ターミナルでexitしたときの終了コードが1や2であることが少し気になるが、上でやったことは恐らく関係ないのだと思う。
以上です。
広告


