web-dev-qa-db-ja.com

macOSのDockerでssh-agentを使用する

Ssh-agentを使用してキーをDockerイメージに転送し、プライベートなgithubリポジトリからプルしたいと思います。

Yosemiteのboot2dockerで https://github.com/phusion/passenger-docker のわずかに変更されたバージョンを使用しています。

ssh-add -l
...key details
boot2docker up

それから私は多くの場所で見たコマンドを使用します(つまり https://Gist.github.com/d11wtq/8699521 ):

docker run --rm -t -i -v $SSH_AUTH_SOCK:/ssh-agent -e SSH_AUTH_SOCK=/ssh-agent my_image /bin/bash

ただし、動作しないようです。

root@299212f6fee3:/# ssh-add -l
Could not open a connection to your authentication agent.

root@299212f6fee3:/# eval `ssh-agent -s`
Agent pid 19

root@299212f6fee3:/# ssh-add -l
The agent has no identities.

root@299212f6fee3:/# ssh [email protected]
Warning: Permanently added the RSA Host key for IP address '192.30.252.128' to the list of known hosts.
Permission denied (publickey).
25
Paul Odeon

ワンライナー:

Debian Jessieイメージを実行しているUbuntu 16で設定する方法は次のとおりです。

docker run --rm -it --name container_name \
-v $(dirname $SSH_AUTH_SOCK):$(dirname $SSH_AUTH_SOCK) \
-e SSH_AUTH_SOCK=$SSH_AUTH_SOCK my_image

https://techtip.tech.blog/2016/12/04/using-ssh-agent-forwarding-with-a-docker-container/

5
MJ1

@wilwilsonの答えを拡張して、OSX boot2docker環境でエージェント転送をセットアップするスクリプトを作成しました。

https://Gist.github.com/rcoup/53e8dee9f5ea27a51855

#!/bin/bash

# Use a unique ssh socket name per-invocation of this script
SSH_SOCK=boot2docker.$$.ssh.socket

# ssh into boot2docker with agent forwarding
ssh -i ~/.ssh/id_boot2docker \
    -o StrictHostKeyChecking=no \
    -o IdentitiesOnly=yes \
    -o UserKnownHostsFile=/dev/null \
    -o LogLevel=quiet \
    -p 2022 docker@localhost \
    -A -M -S $SSH_SOCK -f -n \
    tail -f /dev/null

# get the agent socket path from the boot2docker vm
B2D_AGENT_SOCK=$(ssh -S $SSH_SOCK docker@localhost echo \$SSH_AUTH_SOCK)

# mount the socket (from the boot2docker vm) onto the docker container
# and set the ssh agent environment variable so ssh tools pick it up
docker run \
    -v $B2D_AGENT_SOCK:/ssh-agent \
    -e "SSH_AUTH_SOCK=/ssh-agent" \
    "$@"

# we're done; kill off the boot2docker ssh agent
ssh -S $SSH_SOCK -O exit docker@localhost

~/bin/docker-run-sshchmod +xそれを使用し、docker-run-ssh の代わりに docker run

4
rcoup

私は同様の問題に遭遇し、コントロールソケットを使用してマスターモードでsshを使用し、次のようなスクリプトですべてをラップすることで、物事をかなりシームレスにすることができました。

#!/bin/sh   

ssh -i ~/.vagrant.d/insecure_private_key -p 2222 -A -M -S ssh.socket -f [email protected] tail -f /dev/null

Host_SSH_AUTH_SOCK=$(ssh -S ssh.socket [email protected] env | grep "SSH_AUTH_SOCK" | cut -f 2 -d =)

docker run -v $Host_SSH_AUTH_SOCK:/ssh-agent \
       -e "SSH_AUTH_SOCK=/ssh-agent" \
       -t hello-world "$@"

ssh -S ssh.socket -O exit [email protected]

宇宙で最もかわいらしいことではありませんが、SSHセッションを手動で開いたままIMOを維持するよりもはるかに優れています。

1
willwilson

キーを転送するためにssh-agentにアクセスする私にとって、OSX Mavericksとdocker 1.5では次のように動作しました:

  1. boot2dockerにssh VM with boot2docker ssh -A。認証エージェント接続の転送を有効にするオプション-Aを使用することを忘れないでください。

  2. Boot2docker sshセッション内:

    docker@boot2docker:~$ echo $SSH_AUTH_SOCK
    /tmp/ssh-BRLb99Y69U/agent.7750
    

このセッションは開いたままにする必要があります。 SSH_AUTH_SOCK環境変数の値をメモします。

  1. 別のOS X端末で、次のように手順2のSSH_AUTH_SOCK値を指定してdocker runコマンドを発行します。

    docker run --rm -t -i \
      -v /tmp/ssh-BRLb99Y69U/agent.7750:/ssh-agent \
      -e SSH_AUTH_SOCK=/ssh-agent my_image /bin/bash
    root@600d0e9b443d:/# ssh-add -l
    2048 6c:8e:82:08:74:33:78:61:f9:9a:74:1b:65:46:be:eb         
    /Users/dev/.ssh/id_rsa (RSA)
    

これを機能させるためにboot2docker sshセッションを開いたままにしておく必要があるという事実はあまり好きではありませんが、より良い解決策が見つかるまで、これは少なくとも私にとってはうまくいきました。

1
henrjk

ソケット転送はまだOS Xでは動作しません。 boot2dockerの代わりにDocker for Macを使用して2019年に導入された@henrjk回答のバリエーションは次のとおりです。

  1. まず、コンテナでsshサーバーを実行します。/tmpはエクスポート可能なボリューム上にあります。このような

     docker run -v tmp:/tmp -v \
     ${HOME}/.ssh/id_rsa.pub:/root/.ssh/authorized_keys:ro \
     -d -p 2222:22 arvindr226/Alpine-ssh
    
  2. 次に、エージェント転送でこのコンテナにsshします

     ssh -A -p 2222 root@localhost
    
  3. そのsshセッションの内部でssh-agentの現在のソケットを見つけます

     3f53fa1f5452:~# echo $SSH_AUTH_SOCK
     /tmp/ssh-9zjJcSa3DM/agent.7
    
  4. これで、実際のコンテナーを実行できます。以下のSSH_AUTH_SOCKの値を、上記のステップで取得した値に置き換えてください

     docker run -it -v tmp:/tmp  \
     -e SSH_AUTH_SOCK=/tmp/ssh-9zjJcSa3DM/agent.7 \
     vladistan/ansible
    
0
Vlad

認証エージェントへの接続を開けませんでした。

このエラー 発生時期$SSH_AUTH_SOCK env varがホストで正しく設定されていないか、まったく設定されていません。試すことができるさまざまな回避策があります。しかし、私の提案は LinuxとmacOSのデュアルブート です。

追加のリソース:

0
Josh Habdas

バージョン2.2.0.0、macOS用dockerを使用すると、コンテナー内のホストのSSHエージェントにアクセスできます。

これを実行させるコマンドの例を次に示します。

docker run --rm -it \
-v /run/Host-services/ssh-auth.sock:/ssh-agent \
-e SSH_AUTH_SOCK="/ssh-agent" \
my_image

特定のパスをマウントする必要があることに注意してください(/run/Host-services/ssh-auth.sock)に含まれるパスの代わりに$SSH_AUTH_SOCK環境変数。Linuxホストで行うのと同じです。

0
Jakub Kukul