ksaitoの日記

日々試したことの覚え書き

dockerコンテナからkeychainを使ってgithubに接続する際に困ったこと

かなり前のブログに、ssh秘密鍵パスフレーズを設定し、keychainを使って毎回パスフレーズを入力しなくて良い方法を書きました。

ksaitoの日記: 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.
$

ansiblegitタスクをdocker connection pluginでセットアップする場合には、ログインシェルを読み込ませることができるのか調べる必要があります…