パスワード接続のssh bastion を Ansibleで。

サーバー準備

Dockerで踏み台とその先のサーバーを立てます

DockerFile

FROM centos:centos7
 
RUN yum -y update && yum -y install openssh-server
RUN sed -ri 's/^#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
 
RUN echo 'root:pass' | chpasswd
 
RUN ssh-keygen -t rsa -N "" -f /etc/ssh/ssh_host_rsa_key
 
EXPOSE 22
 
CMD ["/usr/sbin/sshd", "-D"]

docker-compose.yml

version: '3'
services:
  bastion:
    image: eg_sshd
  web:
    image: eg_sshd

サーバー起動

docker-compose up -d

AnsibleのHosts

/etc/ansible/hosts にこんな感じで、踏み台とwebのip, ssh情報を。webの方は、ipではなく、bastionの中からservice名称で接続。

[bastion]
172.18.0.2

[webserver]
web

[bastion:vars]
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_pass=pass

[webserver:vars]
ansible_ssh_common_args='-o ProxyCommand="sshpass -p pass ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -W %h:%p -q root@172.18.0.2"'
ansible_ssh_user=root
ansible_ssh_pass=pass

動作確認

ansible all -m ping