Ansible: SSH berfungsi, tetapi kemungkinan menghasilkan kesalahan yang tidak dapat dijangkau

Dibuat pada 7 Apr 2016  ·  93Komentar  ·  Sumber: ansible/ansible

JENIS MASALAH

  • Laporan Bug
VERSI ANSIBLE
ansible 2.0.0.2
  config file = 
  configured module search path = Default w/o overrides
KONFIGURASI

Tidak ada perubahan

OS / LINGKUNGAN

OS X El Capitan Versi 10.11.3

RINGKASAN

Saya dapat terhubung ke Rasberry Pi saya melalui ssh melalui kabel ethernet melalui "ssh [email protected] " tetapi menjalankan Ansible dengan alamat IP ini sebagai host gagal.

Saya telah berhasil mengkonfigurasi Pi Rasberry ini dengan memungkinkan melalui wifi (menggunakan alamat IP wifi), tetapi sekarang mencoba menggunakan ansible melalui koneksi ethernet langsung saya mendapatkan pesan kesalahan samar:

`TASK [setup] *******************************************************************
fatal: [169.254.0.2]: UNREACHABLE! => {"changed": false, "msg": "ERROR! (25, 'Inappropriate ioctl for device')", "unreachable": true}`

Karena saya _dapat_ berhasil terhubung ke pi ini menggunakan alamat IP itu melalui ssh dari terminal, saya mengemukakan bahwa ini adalah bug di Ansible.

LANGKAH UNTUK REPRODUKSI

Saya menjalankan perintah ini untuk menjalankan peran tersebut

ansible-playbook ansible-pi/playbook.yml -i ansible-pi/hosts --ask-pass --sudo -c paramiko -vvvv

Saya juga mencoba

ansible-playbook ansible-pi/playbook.yml -i ansible-pi/hosts --ask-pass --sudo -vvvv

yang mengarah ke kesalahan yang sama.

file host

[pis]
169.254.0.2

pedoman


---

- name: Ansible Playbook for configuring brand new Raspberry Pi

  hosts: pis
  roles:
    - pi
  remote_user: pi
  sudo: yes

Saya berasumsi bahwa role sebenarnya tidak penting karena ansible gagal pada langkah koneksi ssh.

HASIL YANG DIHARAPKAN

Saya berharap dapat terhubung ke pi dan menjalankan peran (saya telah berhasil melakukan ini melalui menghubungkan melalui alamat IP melalui wifi)

HASIL NYATA
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/getpass.py:83: GetPassWarning: Can not control echo on the terminal.
No config file found; using defaults
  passwd = fallback_getpass(prompt, stream)
Warning: Password input may be echoed.
SSH password: raspberry

[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and 
make sure become_method is 'sudo' (default). This feature will be removed in a 
future release. Deprecation warnings can be disabled by setting 
deprecation_warnings=False in ansible.cfg.
Loaded callback default of type stdout, v2.0
1 plays in ansible-pi/playbook.yml

PLAY [Ansible Playbook for configuring brand new Raspberry Pi] *****************

TASK [setup] *******************************************************************
<169.254.0.2> ESTABLISH CONNECTION FOR USER: pi on PORT 22 TO 169.254.0.2
CONNECTION: pid 2118 waiting for lock on 10
CONNECTION: pid 2118 acquired lock on 10
fatal: [169.254.0.2]: UNREACHABLE! => {"changed": false, "msg": "ERROR! (25, 'Inappropriate ioctl for device')", "unreachable": true}

PLAY RECAP *********************************************************************
169.254.0.2                : ok=0    changed=0    unreachable=1    failed=0   
affects_2.0 affects_2.1 affects_2.2 affects_2.3 affects_2.4 affects_2.5 bug pluginconnectiossh

Komentar yang paling membantu

Ini terjadi secara tiba-tiba saat saya mengupgrade Ansible.

Agar berhasil menjalankan saya harus:

ansible-playbook --limit grunndata playbook.yml -c paramiko -u deploy

Tadi saya hanya lari

ansible-playbook --limit grunndata playbook.yml

SSH normal dengan yang berikut ini berfungsi tanpa masalah:

ssh deploy<strong i="13">@grunndata</strong>

Sesuatu telah berubah.

Informasi apa yang dapat saya berikan untuk membantu men-debug ini?

Saya menjalankan yang berikut ini:

  • Ubuntu 16.04
  • Kemungkinan 2.1.0.0 diinstal melalui pip

Semua 93 komentar

Hai!

Terima kasih banyak atas kiriman Anda ke Ansible. Ini sangat berarti bagi kami.

Kami memiliki beberapa pertanyaan yang ingin kami ketahui sebelum kami dapat membuat permintaan ini diantrekan. Jika Anda dapat membantu menjawabnya, kami akan sangat menghargainya:

  • Sudahkah Anda mencoba menonaktifkan pengumpulan fakta untuk memeriksa lebih banyak kesalahan verbose dari tugas?
  • Dengan menonaktifkan pengumpulan fakta, apakah Anda sudah menguji modul mentahnya?

Hanya sebagai pengingat cepat, ini adalah proyek yang sangat sibuk. Kami memiliki lebih dari 800 kontributor dan mengelola antrian secara efektif
kami menetapkan hal-hal sebagai prioritas antara P1 (tertinggi) dan P5. Kami ingin mengucapkan terima kasih banyak atas waktu Anda!
Kami akan mengerjakan berbagai hal dalam urutan prioritas, jadi hanya ingin Anda mengetahui antrean dan mengetahui bahwa kami tidak melupakan Anda!

Kami pasti akan melihat komentar Anda tentang masalah ini saat membaca tiket ini, tetapi mungkin tidak dapat segera membalas. Anda mungkin juga ingin bergabung dengan salah satu dari dua milis kami
yang sangat aktif:

Terima kasih sekali lagi untuk ini dan minat Anda pada Ansible!

@mhfowler : Saya dapat melewati ini dengan memberikan ansible_password dalam inventaris saya

ansible_password bekerja untuk saya juga

[testServer]
192.168.33.10

[testServer:vars]
ansible_password=vagrant

Ini terjadi secara tiba-tiba saat saya mengupgrade Ansible.

Agar berhasil menjalankan saya harus:

ansible-playbook --limit grunndata playbook.yml -c paramiko -u deploy

Tadi saya hanya lari

ansible-playbook --limit grunndata playbook.yml

SSH normal dengan yang berikut ini berfungsi tanpa masalah:

ssh deploy<strong i="13">@grunndata</strong>

Sesuatu telah berubah.

Informasi apa yang dapat saya berikan untuk membantu men-debug ini?

Saya menjalankan yang berikut ini:

  • Ubuntu 16.04
  • Kemungkinan 2.1.0.0 diinstal melalui pip

+1

perlu menambahkan -c paramiko karena salah satu dari 5 host gagal, dan saya dapat melakukan ssh ke semuanya dengan sukses.

Bagi saya, saya memiliki entri .ssh / config agar pengguna saya cocok dengan nama host jarak jauh.

Host servername  
    User username

Saya bisa SSH langsung ke server dengan ssh servername

Namun, dengan Ansible, saya perlu menambahkan parameter -u ke perintah penerapan:

ansible-playbook -vvvv -i poc book_deploy.yml --ask-vault-pass --ask-become-pass -u username

Setelah itu, bisa terapkan ok.

Agak aneh tidak menggunakan file .ssh / config seperti sebelumnya, tetapi solusi berfungsi, terima kasih :)

Penutupan @mhfowler telah diminta untuk masalah ini atau telah habis waktunya menunggu tanggapan Anda.
klik di sini untuk bantuan bot

Kenapa ini? Saya sangat senang melakukan ping mungkin -m sekarang saya perlu lakukan -u pengguna -c paramiko

@roolo Saya juga menyetel 'ansible_password' dan itu mulai berhasil untuk saya. Untuk apa ini? Anda dapat mengaturnya menjadi apa pun yang Anda inginkan dan itu akan berfungsi sekarang.

Masalah yang sama dengan opsi 2.1.2.0 dan --ask-pass yang memungkinkan.
OS X 10.11.6

ohallors fix tidak membantu.

Saya jauh dari komputer saya selama beberapa minggu. Tolong ping saya tentang ini setelahnya
3 November jika saya tidak akan membalas sendiri. Terima kasih

Sama.

$ ansible --version

ansible 2.2.0 (devel 6666d13654) last updated 2016/09/22 10:43:16 (GMT -700)
  lib/ansible/modules/core: (detached HEAD 0f505378c3) last updated 2016/09/23 17:20:56 (GMT -700)
  lib/ansible/modules/extras: (detached HEAD 935a3ab2cb) last updated 2016/09/23 17:20:56 (GMT -700)

Menggunakan -c paramiko sepertinya bekerja lebih baik, sepertinya -c smart rusak .

Jika itu membantu siapa pun, saya menyelesaikan masalah ini di Ubuntu 16.04 dengan mengganti baris ini di file host saya ...

web1 ansible_ssh_host=my_remote_user<strong i="6">@my_ip</strong>

dengan

web1 ansible_ssh_host=my_ip

dan kemudian memastikan saya telah menambahkan

remote_user=my_remote_user

ke ansible.cfg saya

Bagi saya itu hanya karena saya telah menambahkan "my_remote_user @" di depan alamat ip saya. Ini telah berhasil sebelum saya meningkatkan.

Saya memiliki masalah yang sama dan melakukan ping ke host terlebih dahulu entah bagaimana menyelesaikan masalah.

ansible <host> -i <inventory-file> -m ping

UPD: Saya harus menjalankan perintah ping hampir setiap kali sebelum menjalankan playbook. Seperti setelah beberapa menit buku pedoman tidak aktif gagal lagi.

@ cue232s Ia mengatakan kepada Ansible sandi apa yang digunakan untuk koneksi ssh.

http://docs.ansible.com/ansible/intro_inventory.html#list -of-behavioral-inventory-parameter (sepertinya parameter sekarang disebut _ansible_ssh_pass_)

Saya menyelesaikan masalah serupa di Mac OS X dengan kemungkinan 2.1.2.0 yang dapat membantu. Tidak yakin ke mana lagi akan mempostingnya. Saya bisa ssh ke instance, tetapi menjalankan playbook saya menghasilkan:

fatal: [ec2-1-2-3-4.us-west-2.compute.amazonaws.com]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true}

Tidak ada keluaran kesalahan lainnya. Tapi itu berhasil dengan -c paramiko ditambahkan.

Saya menurunkan versi ke 1.9.4 yang mungkin ( pip install ansible==1.9.4 ) dan sekarang ketika saya menjalankannya saya mendapatkan kesalahan:

fatal: [ec2-1-2-3-4.us-west-2.compute.amazonaws.com] => SSH Error: unix_listener: "/Users/myname/.ansible/cp/ansible-ssh-ec2-1-2-3-4.us-west-2.compute.amazonaws.com-22-ubuntu.0o1S2DUmaWg7dLdF" too long for Unix domain socket

Jadi saya meningkatkan kembali ke 2.1.2.0 dan saya menambahkan file ansible.cfg ke direktori proyek saya dengan konten ini:

[ssh_connection]
control_path=%(directory)s/%%h-%%r

Dan koneksi itu berhasil.

Saya mengalami masalah yang sama seperti https://github.com/ansible/ansible/issues/15321#issuecomment -256346976

ansible-playbook gagal terhubung dan tidak membuat soket di bawah ~/.ansible/cp . Jika saya menjalankan ansible -m ping terlebih dahulu, soket dibuat dan ansible-playbook akan berhasil jika saya menjalankan dalam 60 detik.

Menariknya, jika saya menjalankan ansible-playbook dengan opsi -vvv dan kemudian menyalin perintah ssh persis seperti yang ditunjukkan dan menjalankannya, koneksi berhasil dan ansible-playbook juga akan berhasil.

Saya mengalami masalah pada ansible-2.1.2.0 yang diinstal dengan Homebrew di macOS Sierra 10.12.1

Menurunkan versi ke 2.1.1.0 menghilangkan masalah bagi saya.

Saya memiliki masalah yang sama

  • memungkinkan: 2.1.2.0
  • Fedora 24 sebagai kotak manajemen
  • CentOS 7 sebagai kotak terkelola

Saya telah menyelesaikannya dengan menambahkan kunci yang digunakan untuk otentikasi ke ssh-agent. Kunci yang saya gunakan adalah tanpa kata sandi.

Mengalami masalah yang sama. Upaya OpenSSH standar gagal tetapi paramiko berfungsi.

Menjalankan Ansible di dalam Vagrant / Virtualbox di Windows untuk menyediakan VM jarak jauh. Kedua mesin menjalankan Ubuntu 16.04. Versi yang memungkinkan 2.1.2.0 File konfigurasi yang memungkinkan terletak di /ansible/ansible.cfg.

baris host:

raw1  ansible_host=xx.xx.xx.xx  ansible_port=22  ansible_user=root  ansible_ssh_pass=wer32dw

Ini gagal:

ubuntu<strong i="12">@devbox</strong>:/ansible$ sudo ansible raw1 -vvvv -m ping
Using /ansible/ansible.cfg as config file
Loaded callback minimal of type stdout, v2.0
<xx.xx.xx.xx> ESTABLISH SSH CONNECTION FOR USER: root
<66.23.245.125> SSH: EXEC sshpass -d12 ssh -C -vvv -o ControlMaster=auto -o ControlPersist=60s -o Port=22 -o User=root -o ConnectTimeout=10 -o ControlPath=/home/ubuntu/.ansible/cp/ansible-ssh-%h-%p-%r 66.23.245.125 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1477987158.35-58855315932449 `" && echo ansible-tmp-1477987158.35-58855315932449="` echo $HOME/.ansible/tmp/ansible-tmp-1477987158.35-58855315932449 `" ) && sleep 0'"'"''
raw1 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}

Ini bekerja:

ubuntu<strong i="16">@tgpdevbox</strong>:/ansible$ sudo ansible raw1 -vvvv -m ping -c paramiko
Using /ansible/ansible.cfg as config file
Loaded callback minimal of type stdout, v2.0
<xx.xx.xx.xx> ESTABLISH CONNECTION FOR USER: root on PORT 22 TO xx.xx.xx.xx
<xx.xx.xx.xx> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1477987431.74-236753198598806 `" && echo ansible-tmp-1477987431.74-236753198598806="` echo $HOME/.ansible/tmp/ansible-tmp-1477987431.74-236753198598806 `" ) && sleep 0'
<xx.xx.xx.xx> PUT /tmp/tmp7oXJF4 TO /root/.ansible/tmp/ansible-tmp-1477987431.74-236753198598806/ping
<xx.xx.xx.xx> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-tmp-1477987431.74-236753198598806/ /root/.ansible/tmp/ansible-tmp-1477987431.74-236753198598806/ping && sleep 0'
<xx.xx.xx.xx> EXEC /bin/sh -c 'LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 /usr/bin/python /root/.ansible/tmp/ansible-tmp-1477987431.74-236753198598806/ping; rm -rf "/root/.ansible/tmp/ansible-tmp-1477987431.74-236753198598806/" > /dev/null 2>&1 && sleep 0'
raw1 | SUCCESS => {
    "changed": false,
    "invocation": {
        "module_args": {
            "data": null
        },
        "module_name": "ping"
    },
    "ping": "pong"
}

## Solusi: Tingkatkan ke Ansible 2.2.0.0 dan saya tidak lagi harus menggunakan -c paramiko

Saya mengalami kesalahan ini, dengan modul cron , dan peningkatan versi ke 2.2.0.0 dapat diperbaiki untuk saya juga!

saya dapat terhubung ke host saya sebagai root tetapi tidak dapat menjalankan kemungkinan saya

[root<strong i="6">@workstation</strong> svc_deployer]# ansible puppet.home.io -m ping --become-user=root --ask-sudo-pass
SUDO password:
puppet.home.io | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}
[root<strong i="7">@workstation</strong> svc_deployer]# ssh puppet.home.io
[email protected]'s password:
Last login: Sun Nov 13 18:45:00 2016 from 192.168.56.160
[root<strong i="8">@puppet</strong> ~]#

saya mencoba verbose

[root<strong i="12">@workstation</strong> svc_deployer]# sudo ansible puppet.home.io -m ping --become-user=root -c ssh -vvvv --become-method=sudo
Using /etc/ansible/ansible.cfg as config file
Loaded callback minimal of type stdout, v2.0
<puppet.home.io> ESTABLISH SSH CONNECTION FOR USER: None
<puppet.home.io> SSH: EXEC ssh -C -vvv -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/ansible-ssh-%h-%p-%r puppet.home.io '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1479092049.76-54149073209683 `" && echo ansible-tmp-1479092049.76-54149073209683="` echo $HOME/.ansible/tmp/ansible-tmp-1479092049.76-54149073209683 `" ) && sleep 0'"'"''
puppet.home.io | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}

menemukan solusinya, jalankan perintah berikut di host saya untuk memperbaiki izin folder kunci ssh (Centos6.6)

[root<strong i="6">@puppet</strong> ~]# restorecon -R -v /root/.ssh
restorecon reset /root/.ssh context unconfined_u:object_r:admin_home_t:s0->unconfined_u:object_r:ssh_home_t:s0
restorecon reset /root/.ssh/authorized_keys context unconfined_u:object_r:admin_home_t:s0->unconfined_u:object_r:ssh_home_t:s0

dan dapat menjalankan penyiapan

[root<strong i="10">@workstation</strong> ~]# ansible puppet -m setup
puppet.home.io | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.56.170",
            "192.168.1.89"
        ],
        "ansible_all_ipv6_addresses": [
            "fe80::a00:27ff:fe6a:41b1",
            "2602:306:8b7f:37d0:a00:27ff:fea7:e797",
            "fe80::a00:27ff:fea7:e797"
        ],

mencoba beberapa kombinasi nama ansible_host dan saya telah menemukan itu berfungsi

foo.bar.com
XXX.XXX.XXX.XXX (ip addresses)

dan itu tidak berfungsi (tanpa menentukan paramiko) dengan

foo-with-dashes.bar.com
foo.with.periods.AND.more.than.one.section.before.bar.com

Membatasi izin kunci ssh hingga 600 memperbaiki masalah ini.

Memiliki masalah yang sama:
memungkinkan 2.1.2.0
Ubuntu 14.04.5 x64

Kesalahan:

failed: [shshprod](item=shsh-api) => {"item": "shsh-api", "msg": "Failed to connect to the host via ssh.", "unreachable": true}

ketika saya mencoba membuat buku pedoman yang mungkin -i inventory.ini shsh.yml --key-file ssh / deploy
Apakah ini untuk izin kunci ssh?

@ jimi-c Mengapa masalah ini ditutup lagi?

Masalah ditutup otomatis oleh bot kami karena kurangnya respons. Berdasarkan beberapa tanggapan di atas, tampaknya (setidaknya dalam beberapa kasus) terkait dengan izin pada kunci SSH (yang harus selalu menjadi 0600 untuk kunci pribadi).

Tampaknya bukan masalah izin bagi saya, saat ini mungkin ada di 2.1.2.0
Saya mendapatkan kembali nama DNS untuk contoh ec2 yang saya coba lakukan. Hadir kembali dalam bentuk: ec2 - # {ip_address} .ap-Southeast-2.compute.amazonaws.com

Itu menghasilkan kesalahan:

UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true}

Namun jika saya menggunakan alamat IP untuk server, itu berjalan tanpa masalah ... Jadi tampaknya lebih dekat dengan masalah yang ditemui @marcstreeter

bot_skip

Saya memiliki pengalaman kasus ini, menjalankan kemungkinan 2.0.2.0 dengan host target yang menjalankan CentOS.

Dalam skenario saya, saya memiliki hosts berisi detail seperti ansible_host ansible_user dan ansible_ssh_pass
Namun, sepertinya penguraian karakter tampaknya tidak mendukung "#" (yaitu 3 server memiliki kata sandi yang berisi "#" dan 3 host tersebut telah menandai kesalahan tersebut).

Menjalankan pedoman, ini memberi saya kesalahan:

PLAY [all] *********************************************************************

TASK [setup] *******************************************************************
<120.xxx.xxx.xxx> ESTABLISH CONNECTION FOR USER: root on PORT 22 TO 120.xxx.xxx.xxx
fatal: [sz-server]: UNREACHABLE! => {"changed": false, "msg": "Authentication failed.", "unreachable": true}

Bagian yang aneh adalah bahwa kesalahan tersebut secara khusus menyatakan Otentikasi gagal. tetapi melakukan sesi SSH, berhasil.

Memeriksa log secure server, itu menunjukkan sesuatu seperti:

<server> sshd[23642]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=<sz-server> user=root
<server> sshd[23642]: pam_succeed_if(sshd:auth): requirement "uid >= 1000" not met by user "root"
 <server> sshd[23642]: Failed password for root from <IP> port 61912 ssh2

Mengubah sandi saya, mengganti "#" dengan karakter khusus yang berbeda seperti "%" dapat dilakukan.
Sekarang, pedoman tersebut berhasil dijalankan di semua mesin.

@ upbeta01 itu bug lama, dan saya pikir kami telah memperbaikinya beberapa waktu yang lalu. Anda mungkin perlu mengosongkan # agar tidak dianggap sebagai awal komentar

Terima kasih atas info @ jimi-c, saya mungkin mempertimbangkan untuk memperbarui kemungkinan saya ke versi stabil terbaru. Tidak yakin apakah 2.0.2.0 belum memiliki patch yang diterapkan untuk bug.

Saya menggunakan $ ansible --version 2.2.0.0, dan masalahnya tetap ... semoga bagi saya saya menemukan utas terbuka ini ... mungkin kita bisa menambahkan peringatan saat menggunakan Centos 7

Saya menggunakan kemungkinan 2.2.0.0.

Perintah ini berfungsi karena tidak memerlukan izin sudo:

ansible -m command -a 'df -h' ca.o.prv

Tapi yang ini tidak:

ansible -s -m command -a 'fdisk -l' ca.o.prv
cas.o.prv | FAILED | rc=0 >>
MODULE FAILURE

Terpecahkan:
semua -s --ask-sudo-pass -m raw -a "fdisk -l"

@tyronzerafa & saya sendiri melihat masalah yang sama seperti di atas. lingkungan kita adalah:

OS:
`` $ cat / etc / redhat-release
Rilis CentOS 6.8 (Final)

Ansible Version:
```$ ansible --version
ansible 2.2.0.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides

Ping gagal:
ping $ ansible tcfabrics -m
server3 | TIDAK TERJANGKAU! => {
"berubah": salah,
"msg": "Gagal menyambung ke host melalui ssh:",
"unreachable": benar
}
server1 | SUKSES => {
"berubah": salah,
"pingpong"
}
server2 | SUKSES => {
"berubah": salah,
"pingpong"
}

Successful ping:
```$ ansible tcfabrics -m ping -c paramiko
server3 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
server1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
server2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

host secara acak dan setiap pedoman atau perintah yang kami picu, menggunakan paramiko berfungsi, namun menggunakan default (pintar?) gagal secara acak (namun tidak pernah menghasilkan keberhasilan 100%).

jika masalah ini berbeda, silakan beri tahu kami dan kami akan membuka masalah terpisah

ssh yang TIDAK TERJANGKAU, untuk melihat apa yang terjadi.

Jika Anda tidak memiliki keyfile yang disiapkan untuk server, gunakan -k flag

ansible -i hosts servers -m ping -u root -k

Saya mengekstrak perintah ssh penuh yang dijalankan oleh ansible-playbook dengan menambahkan "-vvvv" ke baris perintahnya, dan menjalankannya secara manual. Ini mencetak ini di bagian akhir:

unix_listener: "/home/saurav/.ansible/cp/ansible-ssh-very-long-aws-ec2-hostname-deploy.XXYY" terlalu panjang untuk soket domain Unix

Mengganti nama host EC2 dengan IP-nya di file host memperbaikinya untuk saya.

Sepertinya ansible tidak menghormati ~/.ssh/config :

Host raspberrypi.local
StrictHostKeyChecking no

Jadi saya bisa masuk melalui shell tapi Kemungkinan gagal. Hal berikut memperbaikinya untuk saya:

ssh-keygen -R raspberrypi.local

Saya akhirnya mendapatkan milik saya untuk bekerja, ini dengan pengguna root, ketentuan pertama saya kira. Terima kasih atas semua tipnya, meskipun ini agak aneh.

  • Host: Ubuntu 16.04.2 LTS
  • Server: Ubuntu 16.04.2 LTS
  • Versi yang Mungkin: Ansible 2.2.1.0
  • Paramiko dengan Python2.7 atau Python3.5 bekerja.

file: host

[test]
91.121.103.38 ansible_ssh_user=root

[test:vars]
ansible_password=MustBeTheRealPassword

perintah

ansible-playbook -vvvv preciousbook.yml -c paramiko -u root --ask-become-pass

Saya perhatikan untuk root pengguna, saya dapat berjalan tanpa flag -u root , dan tanpa menyetel root<strong i="21">@ipaddr</strong> , rather just leave it the as the ipaddr` di host.

ansible-playbook -vvvv php.yml -c paramiko --ask-become-pass - Saya belum mencoba sebagai pengguna non-root atau dengan kunci SSH karena saya tidak menggunakan Digital Ocean yang membuatnya nyaman saat Anda mem-boot mesin.

@JREAM @PGUTH @roolo @ohallors @ringe @mhfowler @midolo @ upbeta01 (dan orang lain yang dapat mereproduksi ini).

Bisakah Anda menguji dengan versi kandidat rilis 2.3 (http://releases.ansible.com/ansible/ansible-2.3.0.0-0.3.rc3.tar.gz)?

Dan jika masih gagal, berikan konfigurasi ansible.cfg, output -vvv, dan info yang dapat dibagikan tentang konfigurasi ssh dan versi yang terlibat?

@alikins - Saya mencoba mengujinya. Saya mendapatkan kesalahan saat menjalankan perintah ansible-playbook . Saya mencoba mengisolasi rilis dengan menggunakan virtualenv . Apakah saya melewatkan sesuatu?

┌─(ansible-2.3)[User][Eldies-MacBook-Pro][~/Private/work/infra/2.3/ansible-2.3.0.0/bin]
└─▪ ./ansible-playbook -l hz-monitor -vvvv
Traceback (most recent call last):
  File "./ansible-playbook", line 43, in <module>
    import ansible.constants as C
ImportError: No module named ansible.constants

Berikut ini tampilannya pada struktur file.

┌─(ansible-2.3)[User][Eldies-MacBook-Pro][~/Private/work/infra/2.3/ansible-2.3.0.0/bin]
└─▪ ls
ansible            ansible-console    ansible-galaxy     ansible-pull       ansible.cfg        hosts
ansible-connection ansible-doc        ansible-playbook   ansible-vault      check_uptime.yml   roles

@ upbeta01 Keren, terima kasih atas pengujiannya. Sepertinya paket python yang memungkinkan tidak ada di sys.path. (misalnya, ~ / Private / work / infra / 2.3 / ansible-2.3.0.0 / lib / ansible harus ada di sys.path). Tidak yakin bagaimana virtualenv diatur, tetapi jika itu pada dasarnya adalah tar.gz yang belum dibuka, coba:

cd ~/Private/work/infra/2.3/ansible-2.3.0.0/
source hacking/env-setup

Itu akan menambahkan ~ / Private / work / infra / 2.3 / ansible-2.3.0.0 / lib / ansible ke PYTHONPATH dan mengatur ANSIBLE_HOME ke ~ / Private / work / infra / 2.3 / ansible-2.3.0.0 yang akan membuatnya berjalan.

Saya yakin pemasangan pip tarball ke virtualenv harus berfungsi dengan baik, tetapi belum memverifikasi itu.

Saya masih memiliki masalah ini, bersedia menguji jika Anda membutuhkan.

Ubuntu 16.04 dan kemungkinan 2.0.0.2

xxxx<strong i="7">@xxxx</strong>:/etc/ansible# ansible-playbook provision.yml

PLAY ***************************************************************************

TASK [setup] *******************************************************************
fatal: [c999951727-cloudpro-689901068]: UNREACHABLE! => {"changed": false, "msg": "ERROR! Authentication failure.", "unreachable": true}

PLAY RECAP *********************************************************************
c999951727-cloudpro-689901068 : ok=0    changed=0    unreachable=1    failed=0

xxx<strong i="8">@xxxxx</strong>:/etc/ansible# ansible New -m ping
c999951727-cloudpro-689901068 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
root<strong i="9">@rundeck</strong>:/etc/ansible# ansible-playbook provision.yml

PLAY ***************************************************************************

TASK [setup] *******************************************************************
ok: [c999951727-cloudpro-689901068]

TASK [user : Create Ansible User] **********************************************
changed: [c999951727-cloudpro-689901068]

TASK [user : Add Ansible Authorized Key] ***************************************
changed: [c999951727-cloudpro-689901068]

TASK [user : Create Personal User] *********************************************
changed: [c999951727-cloudpro-689901068]

TASK [user : Add Personal Authorized Key] **************************************
changed: [c999951727-cloudpro-689901068]

PLAY RECAP *********************************************************************
c999951727-cloudpro-689901068 : ok=5    changed=4    unreachable=0    failed=0

Saya mengalami masalah yang sama

Pastikan Anda memiliki python-simplejson karena Anda bahkan tidak dapat mengumpulkan fakta tanpanya. Menambahkan ini ke awal pedoman saya membantu.

  gather_facts: no
  pre_tasks:
    - name: 'install python2'
      raw: apt-get update; apt-get -y install python-simplejson
    - setup:
        filter=ansible_*
      tags: always

@shadycuz : bagi saya, ini diselesaikan di Ubuntu 16.04 dengan ini ditambahkan ke ansible.cfg:

[ssh_connection] 
# for running on Ubuntu
control_path=%(directory)s/%%h-%%r

Pada catatan terkait, ini menyelesaikannya saat berjalan di host Mac:

[ssh_connection] 
# for running on OSX
control_path = %(directory)s/%%C

saya juga memiliki masalah itu dan menemukan bahwa server SFTP saya belum dimulai. mengkonfigurasi ulang server sshd dengan mengubah / etc / ssh / sshd_config, dan restart ssh server. masalahnya telah hilang.

Menjalankan dari host Mac, solusi dari @ttrahan ansible.cfg tidak berhasil untuk saya. Saya memiliki buku pedoman yang terhubung ke beberapa kotak, yang sebagian besar menjalankan Ubuntu 14.04 atau 12.04. Semua kotak Ubuntu bekerja tanpa masalah. Dua kotak yang menjalankan CentOS, bagaimanapun, keduanya gagal terhubung dengan galat berikut:

fatal: [<a-centos-host>]: UNREACHABLE! => {"changed": false, "msg": "Failed to open session: [Errno 54] Connection reset by peer", "unreachable": true}

@alikins , tidak yakin apakah env-setup Anda sebutkan adalah var atau sebenarnya berkaitan dengan file.

Inilah yang saya lihat di dalam direktori hacking

┌─[User][Eldies-MacBook-Pro][~/Private/work/infra/2.3/ansible-2.3.0.0]
└─▪ source hacking/
dump_playbook_attributes.py  module_formatter.py          templates/   

haruskah saya mengunduh ulang file tar, karena ada file baru di dalamnya?

Hai, Ada yang bisa membantu saya. Saya tidak dapat melakukan ping ke router cisco dari VM saya (CentOS 7.)

[root<strong i="6">@centos7</strong> ansible]# ansible ios -m ping 
<IP_address> | UNREACHABLE! => {
    "changed": false,
    "msg": "Authentication failed.",
    "unreachable": true
}

Berikut potongan file ansible.cfg:

transport  = paramiko
host_key_checking = False
# SSH timeout
timeout = 20

file host:

[ios]
10.10.15.233 ansible_ssh_user=local ansible_ssh_pass=password

json [root<strong i="15">@centos7</strong> ansible]# ansible --version ansible 2.2.1.0 config file = /etc/ansible/ansible.cfg configured module search path = Default w/o overrides

Hai,

Saya memiliki 'kesalahan yang tidak terjangkau' yang sama dengan kemungkinan 2.3.0.0 yang berjalan di Ubuntu 16.04.
Ditambahkan -c paramiko

Contoh: $ ansible-playbook -i inventory ./router/tasks/get-vlan.yml -c paramiko)

Tapi saya kemudian mendapat pesan kesalahan yang sama sekali berbeda - tidak ada metode otentikasi yang tersedia,

Kesalahan baru itu teratasi dengan sendirinya saat menambahkan 'koneksi: lokal' ke YAML dan terus bekerja bahkan setelah menjatuhkan -c paramiko, sehingga menyelesaikan kedua masalah.

  • referensi untuk memperbaikinya ada di sini: [https://github.com/ansible/ansible/issues/16017]
$ ansible-playbook -i inventory ./router/tasks/get-vlan.yml
`---
- name: Check for VLAN 123 from Cisco IOS Routers
  hosts: routers
  connection: local

  vars_prompt:
      - name: "username"
        prompt: "Username"
        private: no
      - name: "password"
        prompt: "Password"

  tasks:
    - ios_command:
        username: "{{ username }}"
        password: "{{ password }}"`
        commands: "show ip int bri | inc vlan 123"

@ dave-morrow Terima kasih atas balasan Anda.
Setelah membaca banyak dokumen, saya menemukan dua hari yang lalu bahwa perbaikannya menggunakan 'connection = local'.
Tapi, saya bertanya-tanya mengapa baris perintah IOS tidak memenuhi syarat sebagai shell untuk memungkinkan. Mengapa kita perlu menjalankan perintah pada host yang memungkinkan. Ada pemikiran, tolong?

@ b2sweety Ini pertanyaan bagus yang saya tidak tahu jawabannya.

Maaf, tetapi Ansible sangat baru bagi saya, sebenarnya saya telah bermain dengannya lebih dari sehari.
Saya tahu Cisco (IOS) CLI tidak seperti UNIX (POSIX) CLI, jadi mungkin itu ada hubungannya dengan itu.

Saya akan menyerahkannya kepada orang lain yang lebih memenuhi syarat untuk menjawab pertanyaan ini.

Halo Tim yang Mungkin,
Saya telah mengonfigurasi Ansible di mesin Rhel 7x. Saya mengambil contoh sebagai 2 mesin. 1 - Server kontrol dan Node 1. Saya menyalin kunci SSH dan dapat login tanpa kata sandi satu sama lain dengan sukses.
ketika mencoba untuk memeriksa "ping: via ansible, mendapatkan error untuk alamat IP Localhost / local control server pada file Invertory.

  • Ping Berhasil di node Jarak Jauh tetapi Tidak Dapat Dijangkau di Localhost
[ansible@ip-172-31-27-41 .ssh]$ ansible test -m ping
172.31.27.41 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).\r\n", 
    "unreachable": true
}

Itu adalah kesalahannya, Tolong beri saya solusi. Surat Saya - "nlkalyan. [email protected] "

Yang memperbaikinya untuk saya adalah menonaktifkan paramiko dengan menyetel ansible_connection=ssh .

Kesalahan:

UNREACHABLE! => {
    "changed": false,
    "msg": "('Bad authentication type', [u'publickey']) (allowed_types=[u'publickey'])",
    "unreachable": true
}

Memperbaiki:

# Hosts File
[host_name]
XX.XXX.XXX.XXX   ansible_user=username ansible_connection=ssh

jalankan perintah:

ansible-playbook -i inventory_file playbook.yml

Lingkungan Host:

  • ansible 2.2.1.0
  • OSX El Capitan 10.11.6

@Vcoleman , Terima kasih atas bantuannya ..
Saya melakukan langkah yang Anda berikan, Masih Kesalahan yang sama ..
Ping perintah

$ ansible test -m ping

Kesalahan yang ditunjukkan pada milikku adalah beberapa yang berbeda dari milikmu .---->
"" msg ":" Gagal menyambung ke host melalui ssh: Izin ditolak (publickey, gssapi-keyex, gssapi-with-mic) .rn ""
Saya mengubah file Host saya seperti di bawah ini ..

file host saya memasukkan ::

[test]
172.31.27.41 ansible_user=ansible  ansible_connection=ssh
#172.31.22.200
172.31.21.47

di atas 172.31.27.41 adalah server lokal saya (Server kontrol)
sekali lagi saya memiliki masalah yang sama ..

@pavaniandkalyan Apakah Anda yakin pengguna yang memiliki kunci SSH yang benar di RPi adalah pengguna ansible ?

Saya yakin bahwa, saya telah menyalin semua kunci dari server kontrol ke semua node dan sebaliknya sebagai pengguna yang diperbolehkan.
Apakah diperlukan untuk menginstal / memperbarui / ping di server kontrol? Maksud saya, intraksi Server Kontrol harus diperlukan selama Otomatisasi dengan Ansbile? atau hanya node push yang cukup?

Sepertinya tidak benar saya perlu menambahkan -c paramiko:

ansible -i inventory/ec2.py us-west-2 -u ec2-user -m ping -c paramiko
x.x.217.210 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}



ansible -i inventory/ec2.py us-west-2 -u ec2-user -m ping                       
x.x.217.210 | UNREACHABLE! => {
    "changed": false, 
    "msg": "SSH Error: data could not be sent to remote host \"x.x.217.210\". Make sure this host can be reached over ssh", 
    "unreachable": true
}

msg: SSH Error: data could not be sent to remote host "x.x.217.210". Make sure this host can be reached over ssh

Saya mendapatkan masalah yang sama:

$ ansible local -m ping
127.0.0.1 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,password).\r\n", 
    "unreachable": true
}

Memecahkan masalah dengan menginstal

sudo apt-get install sshpass

Setelah installng sshpass, saya menjalankan perintah ini:

ansible local -m ping --ask-pass
SSH password: 
127.0.0.1 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

Semoga ini membantu!!!

gunakan paramiko sebagai solusinya.

ansible-playbook abc.yml -i development -c paramiko

atau tambahkan ke konfigurasi yang memungkinkan

[defaults]
transport = paramiko

Saya memiliki masalah yang sama:

Resolusi saya 👍 *
ansible -c local -i all_servers all_servers -m ping

-c lokal bekerja untuk saya, saya menetapkan transport = local dan kemudian saya tidak perlu memberikan opsi -c dalam prosesnya. Saya pikir -c local menghormati pengaturan file .ssh/config . jika itu tidak diberikan, Anda perlu menentukan semua pengaturan dalam file ansible.cfg . itu tebakan saya.

Kutipan di atas yang saya tulis kemarin, berpikir bahwa Masalah telah diselesaikan. SETELAN DI ATAS YANG SAYA Sebutkan BUKAN JAWABAN YANG TEPAT

Inilah yang memecahkan masalah

Dari apa yang saya lihat. Cara kerja ansible memang benar. Ini mempertimbangkan bahwa Anda dapat mengirimkan file ansible.cfg dengan kode Anda. Jadi versi sebelumnya benar-benar berfungsi dengan file .ssh/config . Tapi versi baru tidak.

Jadi versi baru ansible memungkinkan Anda mengonfigurasi pengaturan ssh di blok [ssh_connection]. di mana Anda dapat meletakkan semua persyaratan untuk ssh. Sekarang itu berarti Anda tidak memerlukan file .ssh / config jika itu adalah server kontrol dan file inventaris Anda dapat memiliki Rekaman IP atau dns. Tapi seperti kebanyakan dari kita yang terbiasa mendapat kehormatan .ssh/config mengalami masalah ini. Untuk ini, Anda harus secara jelas memberi tahu lokasi dari ssh config file . Seperti dibawah ini

ssh_args = -F /Users/vinitk/.ssh/config -o ControlMaster=auto -o ControlPersist=30m
 15 control_path = ~/.ssh/controlmasters/%%r@%%h:%%p

Pengaturan ControlMaster and ControlPersist dan Control_path sesuai dengan pengaturan yang sama dengan yang saya miliki di file .ssh/config . Ini bisa menjadi sesuatu yang lain juga jika Anda ingin membuatnya di lokasi yang berbeda. Untuk kemudahan penggunaan, saya menempatkan jalur yang sama sehingga Ansible dan alat lain seperti Parallel-ssh dapat menggunakan ControlMaster .

CATATAN

control_path = ~/.ssh/controlmasters/%%r@%%h:%%p memiliki dua tanda %% sebagaimana dilampirkan pada satu tanda.

Kemudian bagian selanjutnya adalah Ansible secara default diatur ke smart dalam cara mentransfer file. di bawah ini adalah blok.

# Control the mechanism for transferring files (new)
# If set, this will override the scp_if_ssh option
#   * sftp  = use sftp to transfer files
#   * scp   = use scp to transfer files
#   * piped = use 'dd' over SSH to transfer files
#   * smart = try sftp, scp, and piped, in that order [default]
 transfer_method = scp

Anda harus memiliki sftp Subsystem dalam file sshd_config di server. Dalam kasus saya beberapa server tidak memiliki pengaturan itu dan sftp gagal menyebabkan koneksi kembali sebagai UNREACHABLE . Sesuai pengaturan smart dikatakan bahwa ia akan mencoba sftp, then scp and then pipe dalam urutan itu tetapi tidak berhasil untuk saya mengatur transfer_method = scp|piped bekerja.

Semoga membantu

Sekedar update bagi yang tertarik.

Setiap solusi di sini gagal untuk saya. Satu-satunya hal yang berhasil adalah menurunkan versi ke kemungkinan v. 2.1.5.0-1, yang tersedia di repo. Maka semuanya mulus.

Saya melawan ini selama 2 jam dan kemudian menemukan "-c ssh" ke perintah run-playbook. Bekerja seperti pesona. Ini mengatasi beberapa masalah yang dimiliki versi OpenSSH lama dengan Ansible.

Halo semua ,
Ketika saya mencoba membawa cluster shift terbuka, saya mendapat kesalahan berikut. Saya menjalankan perintah di bawah ini.

sudo ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/byo/config.yml
fatal: [g_all_hosts | default([])]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname g_all_hosts | default([]): Name or service not known\r\n", "unreachable": true}

`` json
[rhnuser3 @ ip-172-31-10-250 ~] $ mungkin -m ping semua
ip-172-31-10-250.ca-central-1.compute.internal | TIDAK TERJANGKAU! => {
"berubah": salah,
"msg": "Gagal menyambung ke host melalui ssh: Verifikasi kunci host gagal.rn",
"unreachable": benar

We have verified following steps.

Master communicating to the node

[ rhnuser3 @ ip-172-31-10-250 ~] $ ssh [email protected]
Login terakhir: Rabu 16 Agustus 08:05:16 2017 dari master
[ rhnuser3 @ node ~] $


Node Communicating to the master

[ rhnuser3 @ ip-172-31-9-57 ~] $ ssh [email protected]
Login terakhir: Rabu 16 Agustus 07:56:06 2017 dari node
[ rhnuser3 @ master ~] $

We have changed necessary changed necessary configuration file from master and node server.

vi /etc/ansible/ansible.cfg


inventaris = / etc / ansible / hosts
sudo_user = rhnuser3


Removed comments from following lines.
We have updated /etc/hosts/file – it is look like

[ rhnuser3 @ ip-172-31-10-250 ~] $ cat / etc / hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

:: 1 localhost localhost.localdomain localhost6 localhost6.localdomain6

172.31.10.250 master
172.31.9.57 node

sudo vi / etc / ssh / sshd_config

PasswordAuthentication ya

PermitEmptyPasswords no

PasswordAuthentication no

sudo cat / var / log / aman


```log
Aug 16 08:28:09 localhost sshd[22792]: Disconnecting: Too many authentication failures for root [preauth]
Aug 16 08:28:09 localhost sshd[22792]: PAM 5 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=blk-222-40-174.eastlink.ca user=root
Aug 16 08:28:09 localhost sshd[22792]: PAM service(sshd) ignoring max retries; 6 > 3

Server master saya melakukan perintah berikut

ssh-keygen -t rsa
cat /home/rhnuser3/.ssh/id_rsa.pub
sudo vi /home/rhnuser3/.ssh/authorized_keys
sudo chmod 600 .ssh/authorized_keys
sudo chown rhnuser3:rhnuser3 .ssh/authorized_keys
cat /home/rhnuser3/.ssh/id_rsa

Server node saya melakukan perintah berikut.

cd /home/rhnuser3
mkdir .ssh
chmod 700 .ssh
chown rhnuser3:rhnuser3 .ssh
sudo vi /home/rhnuser3/.ssh/authorized_keys
sudo chmod 600 .ssh/authorized_keys
sudo chown rhnuser3:rhnuser3 .ssh/authorized_keys
sudo vi /home/rhnuser3/.ssh/id_rsa
sudo chmod 600 .ssh/id_rsa
sudo chown rhnuser3:rhnuser3 .ssh/id_rsa

Silakan coba sarankan ini.
@bayu_joo

virtusademo baru saja berkomentar

[rhnuser3<strong i="64">@master</strong> ~]$ ansible --version
ansible 2.3.1.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
python version = 2.7.5 (default, May 3 2017, 07:55:04) [GCC 4.8.5 20150623 (Red Hat 4.8.5-14)]
[rhnuser3<strong i="67">@master</strong> ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.1 (Maipo)

Saya menggunakan kemungkinan di 2.3.1.0. menambahkan host saya di / etc / ansible / hosts. jika iya, --list-hosts di bawah error datang
KESALAHAN! bidang 'host' diperlukan tetapi belum disetel. Di jalur inventaris ansible.cfg sama. Adakah yang bisa membantu dalam hal ini?

hai..evrey one am an begineer for ansible, saya akan menggunakannya untuk pengiriman berkelanjutan.
saya ingin tahu bagaimana inventaris, pedoman, modul berinteraksi secara internal.
jika ada yang tahu ini, silakan hubungi saya di [email protected]

Bagaimana kita mengatasinya di penghujung hari?

edit : tampaknya layanan SSH pada mesin jarak jauh saya mungkin macet. Saya mencoba untuk memulai sesi ssh baru dengan PuTTY dan itu menutup koneksi sebelum prompt login.

edit2 : Layanan SSH pada mesin jarak jauh memang tidak berfungsi dengan benar lagi meskipun saya belum mendapat jawaban tentang apa sebenarnya kesalahannya. Karena itu terjadi langsung setelah skrip Yang Mungkin ini dijalankan, saya meninggalkan ini di sini seolah-olah ada kesalahan yang Mungkin menyebabkan sshd macet, itu mungkin masih terkait dengan masalah ini. Beberapa detail untuk siapa pun yang mencoba membuat ulang: mesin target dan kontrol adalah intel xeon yang menjalankan CentOS 7. Versi kontrol adalah centos-release-7-4.1708.e17.centos.x86_64 dengan target yang memiliki pengaturan grafis iris.


Sepertinya saya mengalami masalah ini tiba-tiba di bawah ansible 2.4.1.0 . Semuanya berfungsi dengan baik saat saya men-debug peran baru, dan kemudian ini tiba-tiba mulai terjadi.

Ini adalah tugas cacat yang gagal sebelum berhenti terhubung:

 - name: Get media SDK install folder contents
    command: "ls /opt/a-specific-directory/"
    register: directories

  - name: verify expected directories in install folder
    fail:
    when: not ({{directories}}|search({{item}}))
    vars:
        nested_list:
          - - dir1
            - dir2
            - dir3
            - dir4
            - dir5
            - dir6
            - dir7
            - dir8
            - dir9
    with_items: "{{ nested_list }}"

Mereka melemparkan kesalahan ini:

TASK: verify expected directories in install folder
 [WARNING]: when statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: not
({{directories}}|search({{item}}))

fatal: [10.105.15.118]: FAILED! => {"failed": true, "msg": "The conditional check 'not ({{directories}}|search({{item}}))' failed. The error was: template error while templating string: expected token ':', got 'string'. String: {% if not ({'stderr_lines': [], u'changed': True, u'end': u'2017-11-28 12:12:31.502092', 'failed': False, u'stdout': u'dir2\\ndir3\\ndir4\\ndir5\\ndir6\\ndir7\\ndir8\\ndir9', u'cmd': [u'ls', u'/opt/a-specific-directory/'], u'rc': 0, u'start': u'2017-11-28 12:12:31.500354', u'stderr': u'', u'delta': u'0:00:00.001738', 'stdout_lines': [u'dir2', u'dir3', u'dir4', u'dir5', u'dir6', u'dir7', u'dir8', u'dir9']}|search(dir1)) %} True {% else %} False {% endif %}\n\nThe error appears to have been in '/home/my-playbook-location/playbook.yml': line 6, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n  - name: Verify expected directories in media SDK install folder\n    ^ here\n"}

Saya menyalin pesan kesalahan dari menjalankan ansible-playbook -vvvv myplaybook.yml sesudahnya dan mendapatkan:

Failed to connect to the host via ssh: OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 58: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/home/MY-USER/.ansible/cp/01607ca611" does not exist
debug2: resolving "[MY-REMOTE-IP]" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to MY-REMOTE-IP [MY-REMOTE-IP] port 22.
debug2: fd 3 setting O_NONBLOCK
debug1: fd 3 clearing O_NONBLOCK
debug1: Connection established.
debug3: timeout: 10000 ms remain after connect
debug1: identity file /home/MY-USER/.ssh/id_rsa type 1
debug1: key_load_public: No such file or directory
debug1: identity file /home/MY-USER/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/MY-USER/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/MY-USER/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/MY-USER/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/MY-USER/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/MY-USER/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/MY-USER/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.4
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.6.1
debug1: match: OpenSSH_6.6.1 pat OpenSSH_6.6.1* compat 0x04000000
debug2: fd 3 setting O_NONBLOCK
debug1: Authenticating to 10.105.15.118:22 as 'root'
debug3: hostkeys_foreach: reading file "/home/MY-USER/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /home/MY-USER/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys from 10.105.15.118
debug3: order_hostkeyalgs: prefer hostkeyalgs: [email protected],[email protected],[email protected],ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
debug3: send packet: type 20
debug1: SSH2_MSG_KEXINIT sent
Connection reset by MY-REMOTE-IP port 22

Tidak yakin apa yang membuatnya, karena itu telah berhasil sampai sekarang.
Baik file id_rsa pada pengontrol, dan kunci_otorisasi pada mesin jarak jauh tidak berubah sejak saya menambahkan kunci publik di sana seminggu yang lalu dan izin tetap 600.

edit : tampaknya layanan SSH pada mesin jarak jauh saya mungkin macet. Saya mencoba untuk memulai sesi ssh baru dengan PuTTY dan itu menutup koneksi sebelum prompt login.

Ya, saya bahkan mengharapkan masalah itu setiap kali saya mulai menggunakan Ansible di Mac baru. Itu menyedihkan.

Baru saja mengalami ini, sepertinya hanya terjadi pada mac saya sekalipun.

koneksi: lokal di pedoman memperbaiki masalah saya

Kesalahan yang sama dihadapi:
fatal: [1.2.3.4]: TIDAK TERJANGKAU! => {"berubah": false, "msg": "Gagal menyambung ke host melalui ssh: Peringatan: '1.2.3.4' (ECDSA) ditambahkan secara permanen ke daftar host yang diketahuis.rnPermission ditolak (publickey) .rn" , "tidak terjangkau": true}

SSH berfungsi tetapi ada kemungkinan terjadi kesalahan yang tidak terjangkau

@induraj sepertinya pengguna yang memungkinkan Anda menjalankan tidak memiliki akses ke kunci.
dapatkah Anda juga meletakkan output dari ansible --version.
juga pastikan Anda telah menginstal hanya dengan satu metode (pip atau brew)

Terima kasih atas tanggapan cepat:
(ansble) ansible @ sharma : ~ $ pip freeze | grep ansible
ansible == 2.4.2.0

apakah kamu berjalan melalui virtualenv apakah itu memiliki akses ke kunci?

ya, mereka memiliki akses:
ll ~ / .ssh / raj_aws.pem
-rw ------- 1 kemungkinan 1692 13 Jan 23:12 .ssh / raj_aws.pem.
Apakah ada yang dibutuhkan?

@induraj Saya sama sekali tidak yakin tetapi mungkin tidak mendapatkan izin yang tepat melalui virtualenv.

BAIK. bahkan saya mencoba hal yang sama, masih mencoba mencari tahu.

izinkan saya membagikan apa yang saya miliki sampai sekarang.

  • membuat virtualenv
  • diinstal mungkin dengan ketergantungan.
  • mampu membuat instance EC2 dengan memungkinkan.
  • tetapi menghadapi masalah login ke VM EC2 dengan memungkinkan.

Bisakah Anda membantu saya mengakses EC2 VM melalui ansible sehingga saya dapat melanjutkan pengujian saya dengan ansible.

Saya telah mengkonfigurasi pada mesin dasar tanpa virtualenv berfungsi. Mungkin ada beberapa masalah otentikasi pengguna.

Jika Anda ssh-agent memiliki beberapa kunci, gunakan variabel ansible_ssh_private_key_file di entri host Anda untuk menentukan kunci pribadi Anda alih-alih ssh-agent meneruskan kunci yang salah dan ditolak.

Informasi Daftar

Hai!

Terima kasih banyak atas minat Anda pada Ansible. Ini sangat berarti bagi kami.

Tampaknya ini adalah pertanyaan pengguna, dan kami ingin mengarahkan hal-hal semacam ini ke milis atau saluran IRC.

Jika Anda bisa mampir di sana, kami akan sangat menghargainya. Ini memungkinkan kami menyimpan pelacak masalah untuk bug, pull request, RFE, dan sejenisnya.

Sekali lagi terima kasih dan kami berharap dapat melihat Anda di daftar atau IRC. Terima kasih!

Dalam kasus saya, masalah utamanya adalah file kontrol tidak dibuat dan akibatnya perintah proxy tidak memiliki izin yang sesuai.

Perintah diungkapkan dengan menambahkan opsi -vvvvvvv ke cmd yang memungkinkan:

ssh -vvv -o ControlMaster=auto -o ControlPersist=30m -o ConnectionAttempts=100 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o Port=22 -o 'IdentityFile="secret.id_rsa"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=luser -o ConnectTimeout=10 -o 'ProxyCommand=ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -W %h:%p -q [email protected]' -o ControlPath=/Users/me/.ansible/cp/3b9a3c71ba 10.0.3.27 '/bin/sh -c '"'"'python && sleep 0'"'"''

Jika saya secara manual membuat rute ke 10.0.3. * Dan menjalankan ulang perintah itu tanpa opsi -o 'ProxyCommand=ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -W %h:%p -q [email protected]' . File kontrol dibuat, lalu semuanya bekerja.

Saya menyimpang sedikit dengan opsi ForwardAgent di host saya dan di host proxy tidak berhasil. Akhirnya saya hanya melakukan punt dan menjalankan perintah itu untuk setiap host yang gagal dan membiarkan peretasan membuka blokir pekerjaan saya.

Saya menggunakan kunci pribadi non-standar dan tidak ditemukan. Itu 600 perm. ssh-add <path-to-private-key> memperbaiki masalah saya.

Menambahkan kunci saya dengan ssh-copy-id ke server jarak jauh memperbaiki masalah.

menambahkan -o ControlMaster=auto -o ControlPersist=30m ke ssh args memperbaiki masalah saya.

  • versi yang memungkinkan: 2.4.1.0
  • os: macos sierra
  • remote: instance ec2 (centos7, t2.micro)

Lebih:

Mendapatkan kesalahan "TIDAK DAPAT DIJANGKA" di tengah tugas peran. Akan berhenti pada tugas yang sama. Tetapi akan berjalan jika saya hanya mengisolasi tugas itu (melalui tag).

ansible -m ping myServer memberi saya kesalahan UNREACHABLE! .
ansible -c local -m ping myServer bekerja.

EDIT: Untuk memperbaiki ini di buku pedoman saya, saya harus meletakkan:

- hosts: dev
  connection: local

Saya memiliki masalah yang sama dengan ansible 2.6.0
ssh_args saya di ansible.cfg

ssh_args = -o ForwardAgent=yes -o ControlMaster=auto -o ControlPersist=30m -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

Saya bisa SSH ke host secara manual
tetapi menjalankan ansible-playbook atau ansible -m ping mengalami masalah
menurunkan versi mungkin menjadi 2.5.5 memecahkan masalah bagi saya

Saya memiliki masalah yang sama, ubuntu 14.04 dengan kemungkinan 2.6.2 (tingkatkan dari yang mungkin 1.9)

ansible -m ping myServer gave me UNREACHABLE! error.
ansible -c local -m ping myServer worked.

menurut @kararukeys
Saya downgrade ke 2.5.5, tapi masih sama

2018-08-01 16:00:32 [mini<strong i="10">@hq</strong> ansiblecontrol]$ ansible hqpc222.abc.com -i inventory/kw.production -m ping -vvv
/usr/local/lib/python2.7/dist-packages/cryptography/hazmat/primitives/constant_time.py:26: CryptographyDeprecationWarning: Support for your Python version is deprecated. The next version of cryptography will remove support. Please upgrade to a 2.7.x release that supports hmac.compare_digest as soon as possible.
  utils.DeprecatedIn23,
ansible 2.5.5
  config file = /home/mini/D/ansiblecontrol/ansible.cfg
  configured module search path = [u'/home/mini/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python2.7/dist-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4]
Using /home/mini/D/ansiblecontrol/ansible.cfg as config file
Parsed /home/mini/D/ansiblecontrol/inventory/kw.production inventory source with ini plugin
[pid 2014] 16:00:41.194783 D mitogen: mitogen.service.Pool(0x7f73f53147d0, size=16, th='MainThread'): initialized
[pid 2014] 16:00:41.195890 D ansible_mitogen.process: Service pool configured: size=16
META: ran handlers
[pid 2033] 16:00:41.233401 D mitogen: unix.connect(path='/tmp/mitogen_unix_uMVCQQ')
[pid 2033] 16:00:41.234083 D mitogen: unix.connect(): local ID is 1, remote is 0
[pid 2014] 16:00:41.235861 D mitogen: mitogen.ssh.Stream(u'default').connect()
[pid 2014] 16:00:41.304490 D mitogen: hybrid_tty_create_child() pid=2037 stdio=63, tty=17, cmd: ssh -o "LogLevel ERROR" -o "Compression yes" -o "ServerAliveInterval 15" -o "ServerAliveCountMax 3" -o "StrictHostKeyChecking no" -o "UserKnownHostsFile /dev/null" -o "GlobalKnownHostsFile /dev/null" -C -o ControlMaster=auto -o ControlPersist=60s hqpc222.abc.com /usr/bin/python -c "'import codecs,os,sys;_=codecs.decode;exec(_(_(\"eNqFkc1OwzAQhM/NU+S2tmqlTuiFSJFAPSAOCClC9AAVyo9DLRLbOG5NeXq2KVKTcuC2n3bWMxrnbJ3pPjLSCEIDy/yIZBMiNNp+EJoGM5zrnUkIZzHn9Mw5G5PFbXziqtW9IPkY7BjWY/AIaNgf0L4tHLp2YZaFUBfWSwVhoephKb5EtXNF2Yphvdj1dlFKtTAHt9UKMOfsQjbPhsO9sL3U6iW92gy2Qu2lRYbb/O6Zwyabnp00iC2ZLtgU50A66fS7UGknFRrcbD/7JOGR6Arn0DOqdBc5nyY8XlKgAT7rrXSCxAwe7p8eOeevCjBOpWtsnQar7I0ce6+1EQrbBlsCjawoahInS35NGXxLgy81Jjvr1gx8CcevaMyvwWqYT/VeqP1/6r8p40nKH0t5sts=\".encode(),\"base64\"),\"zip\"))'"
[pid 2014] 16:00:41.305373 D mitogen: mitogen.ssh.Stream(u'local.2037').connect(): child process stdin/stdout=63
[pid 2014] 16:00:51.245756 D mitogen: mitogen.ssh.Stream(u'local.2037'): child process still alive, sending SIGTERM
[pid 2033] 16:00:51.246902 D mitogen: mitogen.core.Stream(u'unix_listener.2014').on_disconnect()
[pid 2033] 16:00:51.247108 D mitogen: Waker(Broker(0x7f73f4ac2dd0) rfd=14, wfd=15).on_disconnect()
[pid 2014] 16:00:51.247242 D mitogen: mitogen.core.Stream(u'unix_client.2033').on_disconnect()
hqpc222.abc.com | UNREACHABLE! => {
    "changed": false, 
    "msg": "Connection timed out.", 
    "unreachable": true
}
[pid 2014] 16:00:51.288028 I mitogen: mitogen.service.Pool(0x7f73f53147d0, size=16, th='mitogen.service.Pool.7f73f53147d0.worker-12'): channel or latch closed, exitting: None
[pid 2014] 16:00:51.288404 D mitogen: Waker(Broker(0x7f73f530af50) rfd=9, wfd=11).on_disconnect()
[pid 2014] 16:00:51.288691 D mitogen: <mitogen.unix.Listener object at 0x7f73f5314450>.on_disconnect()
2018-08-01 16:00:51 [mini<strong i="11">@hq</strong> ansiblecontrol]$ 

ada saran? tolong ~

JENIS MASALAH
  • Laporan Bug
VERSI ANSIBLE
ansible 2.0.0.2
  config file = 
  configured module search path = Default w/o overrides
KONFIGURASI

Tidak ada perubahan

OS / LINGKUNGAN

OS X El Capitan Versi 10.11.3

RINGKASAN

Saya dapat terhubung ke Rasberry Pi saya melalui ssh melalui kabel ethernet melalui "ssh [email protected] " tetapi menjalankan Ansible dengan alamat IP ini sebagai host gagal.

Saya telah berhasil mengkonfigurasi Pi Rasberry ini dengan memungkinkan melalui wifi (menggunakan alamat IP wifi), tetapi sekarang mencoba menggunakan ansible melalui koneksi ethernet langsung saya mendapatkan pesan kesalahan samar:

`TASK [setup] *******************************************************************
fatal: [169.254.0.2]: UNREACHABLE! => {"changed": false, "msg": "ERROR! (25, 'Inappropriate ioctl for device')", "unreachable": true}`

Karena saya _dapat_ berhasil terhubung ke pi ini menggunakan alamat IP itu melalui ssh dari terminal, saya mengemukakan bahwa ini adalah bug di Ansible.

LANGKAH UNTUK REPRODUKSI

Saya menjalankan perintah ini untuk menjalankan peran tersebut

ansible-playbook ansible-pi/playbook.yml -i ansible-pi/hosts --ask-pass --sudo -c paramiko -vvvv

Saya juga mencoba

ansible-playbook ansible-pi/playbook.yml -i ansible-pi/hosts --ask-pass --sudo -vvvv

yang mengarah ke kesalahan yang sama.

file host

[pis]
169.254.0.2

pedoman


---

- name: Ansible Playbook for configuring brand new Raspberry Pi

  hosts: pis
  roles:
    - pi
  remote_user: pi
  sudo: yes

Saya berasumsi bahwa role sebenarnya tidak penting karena ansible gagal pada langkah koneksi ssh.

HASIL YANG DIHARAPKAN

Saya berharap dapat terhubung ke pi dan menjalankan peran (saya telah berhasil melakukan ini melalui menghubungkan melalui alamat IP melalui wifi)

HASIL NYATA
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/getpass.py:83: GetPassWarning: Can not control echo on the terminal.
No config file found; using defaults
  passwd = fallback_getpass(prompt, stream)
Warning: Password input may be echoed.
SSH password: raspberry

[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and 
make sure become_method is 'sudo' (default). This feature will be removed in a 
future release. Deprecation warnings can be disabled by setting 
deprecation_warnings=False in ansible.cfg.
Loaded callback default of type stdout, v2.0
1 plays in ansible-pi/playbook.yml

PLAY [Ansible Playbook for configuring brand new Raspberry Pi] *****************

TASK [setup] *******************************************************************
<169.254.0.2> ESTABLISH CONNECTION FOR USER: pi on PORT 22 TO 169.254.0.2
CONNECTION: pid 2118 waiting for lock on 10
CONNECTION: pid 2118 acquired lock on 10
fatal: [169.254.0.2]: UNREACHABLE! => {"changed": false, "msg": "ERROR! (25, 'Inappropriate ioctl for device')", "unreachable": true}

PLAY RECAP *********************************************************************
169.254.0.2                : ok=0    changed=0    unreachable=1    failed=0   

Pada OpenSSH_7.9p1, OpenSSL 1.1.1b, mungkin 2.7.8, ketika dihadapkan dengan kesalahan UNREACHABLE , dengan msg berisi bahwa otentikasi berhasil ( Authenticated to ) tetapi menyebutkan rusak pipa ( debug3: mux_client_read_packet: read header failed: Broken pipe ), pengaturan -o ControlMaster=no di ssh_args bekerja untuk saya tanpa harus menggunakan paramiko atau menjatuhkan ControlPersist .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat