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

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

ただいまの
回答率

90.46%

  • Vagrant

    1420questions

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

  • Ansible

    179questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,085

ryuuinn

score 67

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"
}

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • issei.

    2016/09/04 03:32

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

    キャンセル

回答 1

checkベストアンサー

+2

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

config.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/05 09:08

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

    キャンセル

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

  • ただいまの回答率 90.46%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Vagrant

    1420questions

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

  • Ansible

    179questions

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