Help us understand the problem. What is going on with this article?

Dockerコンテナでsshする時の鍵をホストから持ってくる

More than 1 year has passed since last update.

概要

docker コンテナから scp などしたい場合、 private key をホストから持ってくる必要があります。
agent-forwarding で sock ファイルをマウントすれば完了、と思ったらそうでもなかったのでメモ。

docker内にprivate keyを持ち込むのは危険な行為です。自身の責任で実行してください。

前提

// docker-composeを使っていることを前提としていなかったので追記しました

  • docker-composeを使用します。
    使わなくてもできますが、最近もうdocker-composeにべったりなもんで・・・

Linuxの場合

ホストで agent-forward でログインするか、 ssh-agent が起動していればこれで sock ファイルがマウントされます。

docker-compose.yml
services:
  sshclient:
    environment:
      SSH_AUTH_SOCK: "/tmp/ssh-agent.sock"
    volumes:
      - "$SSH_AUTH_SOCK:/tmp/ssh-agent.sock"

macOS の場合

macOSだと sock ファイルをvolumesでマウントしても使えませんでした。
なので .ssh/id_rsa をマウントしてしまいます。

docker-compose.yml
services:
  sshclient:
    volumes:
      - "~/.ssh/id_rsa:/root/.ssh/id_rsa"

が、これだと id_rsa が存在するホストだと動きますが、
前述のlinuxのようにagent-forwardされた環境だと id_rsa が存在しないので、
マウントすると /root/.ssh/id_rsa/ というディレクトリが作成されてしまい、sshコマンドを実行するとエラーが発生します。

両方の環境で動くように

面倒ですがentrypointでid_rsaがあればコピーしてsshする動きにします。

docker-compose.yml
services:
  sshclient:
    image: [sshコマンドのあるimage]
    environment:
      SSH_AUTH_SOCK: "/tmp/ssh-agent.sock"
    volumes:
      - "$SSH_AUTH_SOCK:/tmp/ssh-agent.sock"
      - "~/.ssh/:/root/.ssh_dir/"
    entrypoint: ["bash", "-l", "-c", "[ -f /root/.ssh_dir/id_rsa ] && mkdir -p /root/.ssh/ && cp -p /root/.ssh_dir/id_rsa /root/.ssh/id_rsa\nssh -A user@host" ]

あまりよろしくないですが、sshするケース自体がレアなので、とりあえずこれで暫定的に対処しました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした