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
途中でプロンプトが何回か出るので、その都度、手で入力すること。(改善の余地あり)
0 件のコメント:
コメントを投稿