MeWrite Docs

UNREACHABLE! SSH Error

AnsibleがSSH接続に失敗した場合に発生するエラー

概要

AnsibleがターゲットホストにSSH接続できない場合に発生するエラーです。認証、ネットワーク、設定の問題が主な原因です。

エラーメッセージ

fatal: [server1]: UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,password).",
    "unreachable": true
}

原因

  1. SSH鍵の問題: 公開鍵が登録されていない
  2. 認証情報の誤り: ユーザー名やパスワードが間違い
  3. ネットワーク問題: ホストに到達できない
  4. SSHの設定: ポートやホストキーの問題

解決策

1. SSH接続を手動で確認

1
2
3
4
5
# 直接SSH接続を試す
ssh -i ~/.ssh/id_rsa user@server1

# 詳細なデバッグ
ssh -vvv user@server1

2. インベントリファイルを確認

1
2
3
4
5
6
# inventory.ini
[webservers]
server1 ansible_host=192.168.1.10 ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa

[all:vars]
ansible_python_interpreter=/usr/bin/python3

3. SSHエージェントを使用

1
2
3
# SSH鍵をエージェントに追加
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

4. ホストキーチェックを無効化(開発時のみ)

1
2
3
# ansible.cfg
[defaults]
host_key_checking = False

または

1
2
export ANSIBLE_HOST_KEY_CHECKING=False
ansible-playbook playbook.yml

5. パスワード認証を使用

1
2
3
4
5
# --ask-passでパスワードを入力
ansible-playbook playbook.yml --ask-pass

# sudo パスワードも必要な場合
ansible-playbook playbook.yml --ask-pass --ask-become-pass

6. SSH設定を追加

1
2
3
4
# playbook.yml
- hosts: all
  vars:
    ansible_ssh_common_args: '-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'

7. 接続タイムアウトを調整

1
2
3
4
5
6
# ansible.cfg
[defaults]
timeout = 30

[ssh_connection]
ssh_args = -o ConnectTimeout=30

8. Pythonインタープリタを指定

1
2
[all:vars]
ansible_python_interpreter=/usr/bin/python3

Ansible の他のエラー

最終更新: 2025-12-09