3.23.2014

Docker: boot2docker SSH Login without Password

Docker: boot2docker VM にパスワード無しで SSH 接続する方法

 

通常の Linux サーバ同様、ssh-keygen コマンドで作ったキーペアの公開鍵をリモートサーバ上に置けば
boot2docker VM に対してもノンパスワードで接続できる。

ただし、例によって boot2docker を再起動しても設定が永続化されるようにするためには
少々の細工が必要となる。

 

作業手順

 

1. 秘密鍵、公開鍵のペアを作成

キーペアを新規に作成し、~/.boot2docker/id_rsa として保存する例。

Mac$ ssh-keygen -t rsa -f $HOME/.boot2docker/id_rsa

プロンプトが出るのでパスフレーズを2回入力。(空でもよい)

 

2. 公開鍵を boot2docker VM の中に置く

公開鍵を永続化するため、/home/docker などではなく、/var/lib/boot2docker/keys というディレクトリを作って
そこに配備することにする。

(ちなみに /var/lib/boot2docker/ssh という既存のディレクトリには sshd サーバの設定情報が保存されている)

Mac$ scp -P 2022 ~/.boot2docker/id_rsa.pub docker@localhost:
docker@localhost's password:    ### tcuser と入力
Mac$ boot2docker ssh
docker@localhost's password:    ### tcuser と入力
boot2docker$ sudo mkdir /var/lib/boot2docker/keys
boot2docker$ sudo mv -i ./id_rsa.pub /var/lib/boot2docker/keys/

 

3. VM起動時に実行されるシェルスクリプトを記述する

もちろん、このままではSSH鍵を使ったログインを行うことはできない。

以下にような内容の /var/lib/boot2docker/bootlocal.sh を作成して、authorized_keys ファイルを動的に生成する。
このシェルスクリプトはVM起動時に自動的に実行される。

boot2docker$ sudo vi /var/lib/boot2docker/bootlocal.sh
boot2docker$ cat /var/lib/boot2docker/bootlocal.sh
#!/bin/sh

mkdir -p /home/docker/.ssh
cat /var/lib/boot2docker/keys/*.pub > /home/docker/.ssh/authorized_keys
boot2docker$ sudo chmod +x /var/lib/boot2docker/bootlocal.sh
boot2docker$ exit

 

4. boot2docker の再起動と接続確認

これで、boot2docker を再起動し ssh コマンドに秘密鍵のパスを渡せば、
ノンパスワードでのログインができるはずだ。

Mac$ boot2docker restart
Mac$ boot2docker ssh -i ~/.boot2docker/id_rsa

問題が発生した場合は、boot2docker ssh -v コマンド(-vvv でも可)で調査。

 

作業シェル記述例

楽をするため、この一連の作業をシェルスクリプトで書く。

適当な作業ディレクトリで実行。

#!/bin/bash

KEY_NAME=id_rsa
PRIVATE_KEY=$HOME/.boot2docker/$KEY_NAME
PUBLIC_KEY=$PRIVATE_KEY.pub
BOOTLOCAL_TMP=/tmp/bootlocal.sh

# Create SSH key pair
if [[ ! -f $PRIVATE_KEY ]]; then
    mkdir -p $HOME/.boot2docker
    ssh-keygen -t rsa -f $PRIVATE_KEY
fi

# Create bootlocal.sh
cat <<EOF > $BOOTLOCAL_TMP
#!/bin/sh

mkdir -p /home/docker/.ssh
cat /var/lib/boot2docker/keys/*.pub > /home/docker/.ssh/authorized_keys
EOF

# Upload public key and bootlocal.sh to VM
boot2docker start
scp -P 2022 $PUBLIC_KEY $BOOTLOCAL_TMP docker@localhost:

# Install files in VM
boot2docker ssh sudo install -D -o root -g root -m 644 ./$KEY_NAME.pub /var/lib/boot2docker/keys/
boot2docker ssh sudo install -o root -g root -m 755 ./bootlocal.sh /var/lib/boot2docker/

# Clean bootlocal.sh
rm -f $BOOTLOCAL_TMP

# Restart boot2docker
boot2docker restart

途中でプロンプトが何回か出るので、その都度、手で入力すること。(改善の余地あり)

 

 

 

Related Posts

0 件のコメント:

コメントを投稿