ikasama over technology

忘れたくないことを忘れないために

Windows から Docker 実行時に鍵ファイルを渡して SSH したい

問題

$ winpty docker-compose exec proxy ls -l //key
total 4
-rwxr-xr-x    1 root     root          1692 Mar 17 20:42 id_rsa
$ winpty docker-compose exec proxy chmod 0600 //key/id_rsa
$ winpty docker-compose exec proxy ls -l //key
total 4
-rwxr-xr-x    1 root     root          1692 Mar 17 20:42 id_rsa

$ winpty docker-compose exec proxy ssh -i //key/id_rsa $STEP_SERVER_USER@$STEP_SERVER
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0755 for '/key/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/key/id_rsa": bad permissions
Permission denied (publickey).

解決方法

  • docker-entrypoint.sh でマウントされた鍵ファイルのコピーを内部で作って chmod する

github.com

#!/bin/sh
KEY_PATH=/root/.ssh
KEY_FILE=key.pem
KEY_FILEPATH=$KEY_PATH/$KEY_FILE
mkdir -p $KEY_PATH
cat /key/$INPUT_KEY_FILENAME > $KEY_FILEPATH
chmod 0600 $KEY_FILEPATH
SSH="ssh -o 'StrictHostKeyChecking no' \
         -o 'ServerAliveInterval 15' \
         -i $KEY_FILEPATH \
         -D 0.0.0.0:$LOCAL_PORT \
         -N \
         $STEP_SERVER_USER@$STEP_SERVER"
echo $SSH
eval $SSH