質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

解決済

1回答

5858閲覧

vagrantにansibleでSSHしようとすると失敗する

ryuuinn

総合スコア75

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

0グッド

1クリップ

投稿2016/09/03 14:53

編集2016/09/04 01:47

vagrantで作ったゲストOSに対し、ansibleを使ってprovisioningしようとしています。

ただ、ansibleからsshでゲストOSへ接続が出来ません。

ansible servers -m ping -i hosts -u vagrant --private-key .vagrant/machines/default/virtualbox/private_key

このようにしても、下記エラーがでてしまします。

192.168.33.12 | FAILED => SSH Error: ssh: connect to host 192.168.33.12 port 22: Operation timed out while connecting to 192.168.33.12:22 It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue.
  • Vagrantfile
Vagrant.configure("2") do |config| config.vm.box = "centos7" config.vm.network "public_network", ip: "192.168.33.12" end

なぜこうなってしまうのか、よく分かっておりません。
解決方法をご教示いただけないでしょうか。

-vvvvをつけた結果

$ ansible -vvvv servers -m ping -i hosts -u vagrant --private-key .vagrant/machines/default/virtualbox/private_key <192.168.33.12> ESTABLISH CONNECTION FOR USER: vagrant <192.168.33.12> REMOTE_MODULE ping <192.168.33.12> EXEC ssh -C -tt -vvv -F ssh.config -o IdentityFile=".vagrant/machines/default/virtualbox/private_key" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 192.168.33.12 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1472951291.76-279065967329050 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1472951291.76-279065967329050 && echo $HOME/.ansible/tmp/ansible-tmp-1472951291.76-279065967329050' 192.168.33.12 | FAILED => SSH Error: Can't open user config file ssh.config: No such file or directory It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue.

↑ なぜかエラーの内容が変わっているみたいです。。

Vagrantfileと同じディレクトリのssh.configを消してしまってたようです

昨日まで、同じディレクトリに下記のような、ssh.configファイルを配置してましたが、
消してしまった結果、↑のようなエラーに変っていたようです。

vagrant ssh-config > ssh.configして、再度作りなおしてみました。

  • sssh.config
Host default HostName 127.0.0.1 User vagrant Port 2201 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile /path/to/vagrant/.vagrant/machines/default/virtualbox/private_key IdentitiesOnly yes LogLevel FATAL

/path/to/vagrant は、Vagrantfileが置いてあるディレクトリへのパスです。

再度-vvvvをつけて実行してみる

$ ansible -vvvv servers -m ping -i hosts -u vagrant --private-key .vagrant/machines/default/virtualbox/private_key <192.168.33.12> ESTABLISH CONNECTION FOR USER: vagrant <192.168.33.12> REMOTE_MODULE ping <192.168.33.12> EXEC ssh -C -tt -vvv -F ssh.config -o IdentityFile=".vagrant/machines/default/virtualbox/private_key" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 192.168.33.12 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1472952616.32-169524910825345 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1472952616.32-169524910825345 && echo $HOME/.ansible/tmp/ansible-tmp-1472952616.32-169524910825345' 192.168.33.12 | FAILED => SSH Error: ssh: connect to host 192.168.33.12 port 22: Operation timed out while connecting to 192.168.33.12:22 It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue.

やはり昨日と同じエラーになってしまいました。

vagrant ssh-configの結果と同じ内容で試すと成功した

vagrant ssh-configの結果を見ると、HostName 127.0.0.1 / Port 2201となっていたので、hostsを下記のように修正してみました。

  • 修正前
[servers] 192.168.33.12 ansible_ssh_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/default/virtualbox/private_key
  • 修正後
[servers] 127.0.0.1 ansible_ssh_port=2201 ansible_ssh_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/default/virtualbox/private_key
リトライ
$ ansible -vvvv servers -m ping -i hosts -u vagrant --private-key .vagrant/machines/default/virtualbox/private_key <127.0.0.1> ESTABLISH CONNECTION FOR USER: vagrant <127.0.0.1> REMOTE_MODULE ping <127.0.0.1> EXEC ssh -C -tt -vvv -F ssh.config -o Port=2201 -o IdentityFile=".vagrant/machines/default/virtualbox/private_key" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 127.0.0.1 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1472953608.71-173719564609049 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1472953608.71-173719564609049 && echo $HOME/.ansible/tmp/ansible-tmp-1472953608.71-173719564609049' <127.0.0.1> PUT /var/folders/f5/7mxqmyw53m1fh1nbxnp_v5vr0000gn/T/tmpwB1h2C TO /home/vagrant/.ansible/tmp/ansible-tmp-1472953608.71-173719564609049/ping <127.0.0.1> EXEC ssh -C -tt -vvv -F ssh.config -o Port=2201 -o IdentityFile=".vagrant/machines/default/virtualbox/private_key" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 127.0.0.1 /bin/sh -c 'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /home/vagrant/.ansible/tmp/ansible-tmp-1472953608.71-173719564609049/ping; rm -rf /home/vagrant/.ansible/tmp/ansible-tmp-1472953608.71-173719564609049/ >/dev/null 2>&1' 127.0.0.1 | success >> { "changed": false, "ping": "pong" }

なぜこれでうまく言ってしまうのでしょうか。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

issei.

2016/09/03 18:32

エラーメッセージにあるとおり、まずはSSHコマンドに -vvvv をつけてデバッグ表示してみてください。
guest

回答1

0

ベストアンサー

ポートフォワーディングで、localhost:2201が仮想マシンの22番ポートに紐づく設定になったからです。
VagrantfileのSSH接続周りで2201で検索かけたらそのような設定している行は見つかるかと思います。

Ruby

1config.vm.network "public_network", ip: "192.168.33.12"

public_networkとあるのですが、private_networkから変更しませんでしたか?
ぶら下がる対象のネットワークが無くて困っているのではないでしょうか?
下二桁目が0だったり1だったりはよくあるパターンですが、33は超特殊なレアケースです。

private_networkに戻せば192.168.33.12のままでも接続出来るようになるかと思います。


余談ですが、Vagrantにはプロビジョンもあります。
vagrantfileにansibleでのプロビジョンの設定を書いて、
vagrant provisionコマンドを発行すれば用途的には事足りるかと思います。

投稿2016/09/04 02:43

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryuuinn

2016/09/05 00:08

ありがとうございます! private_networkに戻してみたところ、192.168.33.12で接続出来ました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問