tech::hexagram

personal note for technical issue.

VagrantのCentOS7の仮想環境で、ansibleがデフォルトの状態では動かなかった

仮想環境の構成管理をchefからansibleに乗り換えようと決意したものの、 デフォルトだとansible -m ping すら出来ない状況に。

以下の様なエラーが出ていた。

$ ansible development -m ping -i hosts -vvvv -c ssh
<192.168.33.10> ESTABLISH CONNECTION FOR USER: vagrant
<192.168.33.10> REMOTE_MODULE ping
<192.168.33.10> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/jun_hashimoto/.ansible/cp/ansible-ssh-%h-%p-%r" -o Port=22 -o IdentityFile="/Users/jun_hashimoto/.ssh/vagrant_id_rsa" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 192.168.33.10 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452 && echo $HOME/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452'
<192.168.33.10> PUT /var/folders/b1/xvrmxy3x5q144lzzrxg081jr0000gn/T/tmp8Y12_A TO /home/vagrant/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452/ping
192.168.33.10 | FAILED => failed to transfer file to /home/vagrant/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452/ping:

Connection closed

イメージには puppetlabs/centos-7.0-64-puppet を利用していたのだが、調べているとCentOS5, 6ではSFTPが無効になっているらしい。

tagomoris.hatenablog.com

立ち上げた仮想環境の /etc/ssh/sshd_config の中身を見ると以下のように、sftpに関する記述があった。

# File is managed by Puppet

AcceptEnv LANG LC_*
ChallengeResponseAuthentication no
GSSAPIAuthentication no
PermitRootLogin yes
PrintMotd no
Subsystem sftp /usr/lib/openssh/sftp-server
UseDNS no
UsePAM yes
X11Forwarding yes

記述があるにも関わらずpingが通らないのはおかしい、sftpのPATHはどうなってるのかと思って調べてみると、configに記載されているpathがなんと間違えていた。。

$ sudo find / -type f -name sftp-server
/usr/libexec/openssh/sftp-server

lib から libexec に修正し、sshdを再起動したらping通った。

$ ansible development -m ping -i hosts -vvvv
<192.168.33.10> ESTABLISH CONNECTION FOR USER: vagrant
<192.168.33.10> REMOTE_MODULE ping
<192.168.33.10> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/jun_hashimoto/.ansible/cp/ansible-ssh-%h-%p-%r" -o IdentityFile="/Users/jun_hashimoto/.ssh/vagrant_id_rsa" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 192.168.33.10 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133 && echo $HOME/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133'
<192.168.33.10> PUT /var/folders/b1/xvrmxy3x5q144lzzrxg081jr0000gn/T/tmpjtkKIl TO /home/vagrant/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133/ping
<192.168.33.10> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/jun_hashimoto/.ansible/cp/ansible-ssh-%h-%p-%r" -o IdentityFile="/Users/jun_hashimoto/.ssh/vagrant_id_rsa" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 192.168.33.10 /bin/sh -c 'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /home/vagrant/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133/ping; rm -rf /home/vagrant/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133/ >/dev/null 2>&1'
192.168.33.10 | success >> {
    "changed": false,
    "ping": "pong"
}

んもー…