かなり前のブログに、sshの秘密鍵にパスフレーズを設定し、keychainを使って毎回パスフレーズを入力しなくて良い方法を書きました。
この方法をdockerコンテナに応用した場合、ちょっと厄介です。
例えば、こんな風にgithubに接続済みの環境があります。
$ /usr/bin/ssh -T git@github.com Hi ****! You've successfully authenticated, but GitHub does not provide shell access. $
環境をdocker化して下記のように実行するとエラーになります。
$ docker exec -it dev /usr/bin/ssh -T git@github.com Permission denied (publickey). $
docker exec
は、デフォルトだとroot
で接続となるのでユーザを指定します。
$ docker exec dev id uid=0(root) gid=0(root) groups=0(root) $ docker exec -u ksaito dev /usr/bin/ssh -T git@github.com Permission denied (publickey). $
keychain
を使うのに必要な環境変数が必要だろうということでログインシェルを読み込ませてみるとうまくいきました。
$ docker exec -u ksaito dev bash -lc "/usr/bin/ssh -T git@github.com" Hi ***! You've successfully authenticated, but GitHub does not provide shell access. $
.bash_profile
に書かれているkeychain
の環境変数の設定が必要ということがわかりました。
$ docker exec -u ksaito dev bash -c "source ~/.keychain/`hostname`-sh; /usr/bin/ssh -T git@github.com" Hi ***! You've successfully authenticated, but GitHub does not provide shell access. $
ansible
のgit
タスクをdocker connection plugin
でセットアップする場合には、ログインシェルを読み込ませることができるのか調べる必要があります…