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