踏み台経由でプライベートサブネットのWindowsサーバーにAnsibleで接続してみました。【エンジニアブログより】
こんにちは、技術4課の城です。
タイトルのとおり、踏み台として用意したLinuxサーバーを経由して、プライベートサブネットに配置されたWindowsサーバーにAnsibleで接続してみました。
以前、こちらのブログにて紹介しましたDocker for Windowsの環境から実施しています。
構成について構成イメージは下記となります。
Dockerfileについて
踏み台経由でアクセスするには、踏み台にSSH接続する必要があり、Dockerfileにインストールするパッケージを追加しています。
Dockerイメージの構築やコンテナへの接続については前述のブログをご参照ください。
FROM amazonlinux
MAINTAINER jo@serverworks.co.jp
RUN yum install -y \
python27-pip.noarch \
openssh-clients \
screen \
vim && \
yum -y reinstall glibc-common && \
yum remove -y python27-chardet.noarch && \
pip install --upgrade pip && \
pip install ansible==2.5.0 && \
pip install pywinrm && \
yum clean all && \
mkdir /prj-data
ENV LANG ja_JP.UTF-8
CMD ["/bin/bash"]
ポートフォワーディングの設定について
ローカルフォワードの設定をします。
1行目ですと、ローカルホスト(Dockerコンテナ)のポート15986のトラフィックをリモートホスト(10.200.0.155)のポート5986に転送するという設定です。
cat ~/.ssh/config
LocalForward localhost:15986 10.200.0.155:5986
LocalForward localhost:15987 10.200.20.10:5986
インベントリについて
インベントリについては下記用意しました。
それぞれのホストがlocalhost、前項で設定したポートに設定しています。
bash-4.2# cat hosts/inventory.yml
all:
children:
servers:
hosts:
windows2016-private01:
ansible_host: localhost
ansible_ssh_pass: XXXXXXXXXXXXXXXXXXXX
ansible_ssh_port: 15986
windows2016-private02:
ansible_host: localhost
ansible_ssh_pass: XXXXXXXXXXXXXXXXXXXX
ansible_ssh_port: 15987
vars:
ansible_ssh_user: Administrator
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore
秘密鍵の用意
秘密鍵はローカルからマウントしたディレクトリにて持ち込みましたが、ひと手間必要です。
そのままSSH接続しようとするとbad permissionということで怒られてしまいます。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0755 for '/root/.ssh/test01.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/root/.ssh/test01.pem": bad permissions
Permission denied (publickey).
マウントしたWindowsのACLが有効なディレクトリではchmodコマンドでパーミッションが書き換えられません。
コンテナ内の適当なところにコピーして権限を変更します。
cp ssh-keys/test01.pem ~/.ssh/.
chmod 600 ~/.ssh/test01.pem
踏み台へSSH接続
踏み台へSSH接続します。
今回はscreenコマンドを利用してSSH接続するセッション、Ansibleを実行するセッションを同時に実行します。
bash-4.2# screen
sh-4.2# ssh -i ~/.ssh/test01.pem ec2-user@【踏み台サーバーのIP】
元のセッションに戻るには ctrl + aのあとに dを入力します。
Ansibleでの接続確認
win_pingモジュールにて接続確認をしてみます。
接続できました!
ansible servers -i hosts/inventory.yml -m win_ping
windows2016-private01 | SUCCESS => {
"changed": false,
"ping": "pong"
}
windows2016-private02 | SUCCESS => {
"changed": false,
"ping": "pong"
}
さいごに
細かいところで色々とつまづいてしまい、悪戦苦闘していたのですがうまく接続できました。
どなたかの参考になれば幸いです。