[PYTHON] Die Synchronisierung mit dem Server, der ssh auf localhost portiert hat, schlägt fehl. [Gelöst]

Überblick

Was du machen willst

Lösung zuerst

Selbst wenn die Portnummer unterschiedlich ist, kommt es zu Fehlfunktionen, wenn der Hostname identisch ist.

Anstatt die IP direkt in die Inventardatei zu schreiben, geben Sie "host1 ansible_ssh_host = 127.0.0.1" an, damit der Hostname nicht abgedeckt wird.

Muster, das fehlgeschlagen ist

Schriftliche Definition

main.yml


- name: sync source code
  synchronize:> 
    dest=/var/ma2saka/myapp
    src=/Users/ma2saka/ansible/work/myapp/ 
    recursive=yes
    links=yes
    rsync_opts="--exclude='.git'"

Im Inventar

inventory.ini


[dev]
127.0.0.1

[dev:vars]
ansible_ssh_user=vagrant
ansible_ssh_port=2222

Der von Vagrant eingerichtete Server wartet am lokalen 2222.

Der öffentliche Schlüssel wird im Voraus wie folgt registriert.

ssh-add -D
ssh-add ~/.ssh/id_rsa
ssh-copy-id -p 2222 [email protected]

Erhalten Sie einen Fehler

TASK: [deploy | sync source code] *********************************************
failed: [127.0.0.1 -> 127.0.0.1] => {"cmd": "rsync --delay-updates -FF --compress --archive --rsh 'ssh  -S none -o StrictHostKeyChecking=no -o Port=2222' --exclude='.git' --out-format='<<CHANGED>>%i %n%L' \"/Users/ma2saka/ansible/work/myapp/\" \"/var/ma2saka/myapp\"", "failed": true, "rc": 23}
msg: rsync: change_dir "/Users/ma2saka/ansible/work/myapp/" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]


FATAL: all hosts have already failed -- aborting

Nein, auch wenn Sie "msg: rsync: change_dir" / Users / ma2saka / ansible / work / myapp / "sagen: fehlgeschlagen: Keine solche Datei oder kein solches Verzeichnis (2)". Weil es dieses Verzeichnis gibt. Egal wie du es betrachtest.

Ich habe es in Brew 1.8.2 gelegt. Ich vermutete, dass es daran lag, dass ich versucht habe, es mit Pip wieder einzubauen

In 1.9.1 gibt es keine besonderen Änderungen.

Funktioniert gut mit Amazon oder einem anderen Server

inventory.ini


[dev]
myapp1.amazon.example.com
myapp2.amazon.example.com
myapp3.amazon.example.com

[dev:vars]
ansible_ssh_user=ec2-user
ansible_ssh_port=22

Es funktioniert wie erwartet ohne Probleme.

Es hat funktioniert, als ich 127.0.0.1 in / etc / hosts einen anderen Namen gegeben habe

127.0.0.1	localhost
255.255.255.255	broadcasthost
::1             localhost
127.0.0.1 this.is.it

inventory.ini


[dev]
this.is.it

[dev:vars]
ansible_ssh_user=vagrant
ansible_ssh_port=2222

Wenn Sie es damit ausführen.

 ..Abkürzung..

TASK: [deploy | sync source code] *********************************************
changed: [this.is.it -> 127.0.0.1]

 ..Abkürzung..

Es klappt ... Dies funktioniert wie erwartet, ist also in Ordnung, aber es gibt noch einige Dinge, die nicht überraschend sind.

Wenn der Hostname localhost lautet, wird überhaupt keine Verbindung hergestellt

Wenn Sie die IP nicht angeben können, warum verwenden Sie nicht localhost?

TASK: [deploy | sync source code] *********************************************
failed: [localhost -> 127.0.0.1] => {"cmd": "rsync --delay-updates -FF --compress --archive --rsh 'ssh  -S none -o StrictHostKeyChecking=no -o Port=2222' --exclude='.git' --out-format='<<CHANGED>>%i %n%L' \"/Users/ma2saka/ansible/work/myapp/\" \"/var/ma2saka/myapp\"", "failed": true, "rc": 12}
msg: ssh: connect to host localhost port 2222: Connection refused
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(600) [sender=3.0.6]

Gut.

Mit anderen Worten, in Wirklichkeit ist der "Name" des Hosts das Problem?

Wird durch Setzen von ansible_ssh_host behoben

Es war genau dieses Phänomen, das aufgefangen wurde.

Wenn Sie eine Verbindung mit ansible zu einem Host herstellen, der auf dem lokalen Host eine Portweiterleitung durchführt, empfiehlt es sich, einen geeigneten Alias in der Inventardatei anzugeben.

[dev]
# lvh.ich oder das.is.Du musst es nicht schreiben
host1 ansible_ssh_host=127.0.0.1

[dev:vars]
ansible_ssh_user=vagrant
ansible_ssh_port=2222

Ich habe auch den Code des Synchronisierungsmoduls und des Skripts überprüft, das zur Laufzeit übertragen wurde, damit ich das Verhalten verstanden habe, aber dies ist eine Falle. Meistens ist die Fehlermeldung zu unfreundlich. Während ich mich beschwere. Es fühlt sich gut an, weil es gelöst wurde.

Betrachtung

Wenn Sie sich -vvvv genau ansehen, können Sie sehen," wo das Skript ausgeführt wird ". Als ich 127.0.0.1 schrieb und fehlschlug, wurde das Skript tatsächlich auf einem Remote-Server ausgeführt. Das Verzeichnis kann jedoch nicht gefunden werden, da der relative Pfad des lokalen Computers in der Quellenspezifikation geschrieben ist.

Als ich das bemerkte, hätte ich sofort ahnen können, dass dies kein Fehler in einem bestimmten Modul war, sondern die Logik zur Auflösung des Hostnamens von ansible, aber ich verbrachte Zeit damit, den falsch platzierten Teil zu verfolgen. Es ist ziemlich schwierig.

Recommended Posts

Die Synchronisierung mit dem Server, der ssh auf localhost portiert hat, schlägt fehl. [Gelöst]
Bearbeiten Sie die Datei des SSH-Verbindungszielservers auf dem Server mit VS-Code
Melden Sie sich mit SSH bei einem Remote-Server an
Zeichentipps mit matplotlib auf der Serverseite
Greifen Sie mit python27 / pyodbc auf dem Container auf den SQL Server des Hosts zu
Ein Hinweis zum Überprüfen der Verbindung zum Lizenzserver-Port
Einstellungen zum Starten des Dango-Projekts auf dem Server mit Pycharm
Einstellungen für die Weiterleitung von Linux-SSH-Ports (Tunnel)
Hinweise zur Verwendung von matplotlib auf dem Server
Ermitteln Sie mit Selenium + PhantomJS + Python die Breite des Div auf der Serverseite
Stellen Sie mit Ihrem Smartphone eine Verbindung zum VPN her und schalten Sie den Server aus / ein