2017-06-28 4 views
1

Ich mache das mehrmals am Tag. Irgendwelche Hinweise zur Automatisierung, so dass ich einen Befehl ausführen kann, um den ganzen Weg zu den Protokollen zu bekommen? Es gibt zwei ssh und dann eine docker exec.Wie automatisiere ich zwei SSH-Schichten plus eine Docker-Exec?

➜ ~ ssh host Last login: Tue Jun 27 15:44:11 2017 from 10.82.34.63 $ ssh another-host Last login: Tue Jun 27 15:44:18 2017 from host $ docker exec -it app-container bash [[email protected] opt]# tail -f tomcat/logs/catalina.out

+0

Ist der erste Host immer gleich? –

+0

Ja, es ist immer 'Host'. – bgoosman

+0

Stack Overflow ist eine Website für Programmier- und Entwicklungsfragen. Diese Frage scheint off-topic zu sein, weil es nicht um Programmierung oder Entwicklung geht. Siehe [Welche Themen kann ich hier fragen?] (Http://stackoverflow.com/help/on-topic) in der Hilfe. Vielleicht [Super User] (http: // Superuser.com /) oder [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/) wäre eine bessere Anlaufstelle. – jww

Antwort

1

Dies ist zumindest eine Teilantwort für ssh. Schauen Sie sich ssh Nutzung Ausgabe:

ssh (.... lots of options ....) [[email protected]]hostname [command] 

So gibt es eine optionale command am Ende der Argumentliste, nach der erforderlichen hostname. Diese in der Tat funktioniert wie Sie es erwarten würden, können Sie „Kette“ another ssh Befehl hier die Fernbedienung ausgeführt ist:

ssh host ssh another-host 

tun wird.

Beachten Sie, dass Ihre ssh keinen tty in diesem Fall zuordnen, so dass es Ihnen nicht ermöglichen wird, eine interaktive Sitzung haben. Aber natürlich können Sie dieses Sekundenssh etwas geben, als auch

ssh host ssh another-host docker exec [...] 

Für den letzten Teil auszuführen, ich sah nur die Docker Dokumentation. Die Option -t erfordert eine tty, also sollten Sie es weglassen. Dann sollten Sie in der Lage sein, auszuführen, was Sie in Ihrem Container mögen, solange es ist nichts interaktive:

ssh host ssh another-host docker exec -i app-container tail -f tomcat/logs/catalina.out 

Natürlich, für die vollständige Automatisierung, verwenden SSH keys und haben einen SSH agent mit Ihrem Schlüssel läuft hinzugefügt.

+0

Danke für die Hilfe! Ich versuchte 'ssh Host ssh ein anderes-host docker exec -it app-container tail -f tomcat/logs/catalina.out' noch bekomme ich einen Fehler:' kann nicht aktivieren tty Modus auf nicht tty Eingabe 'noch kann ich 'pwd' ausführen am Ende des Schwanzes. – bgoosman

+0

'ssh Host ssh ein anderer-Host' funktioniert gut, obwohl – bgoosman

+0

@bgoosman sehe mein Update –

2

Wir können ProxyCommand in OpenSSH für den ersten Teil nutzen (über einen Proxy-Host zu SSH zu anderen springen). Ein Beispiel für Ihre ~/.ssh/config würde wie folgt aussehen:

Host another-host 
    ProxyCommand ssh -W %h:%p host 
    HostName another-host 

Wenn alle Hosts, die Sie passiert sind Proxying durch in der gleichen Domäne zu sein, Sie ein paar von ihnen mit einer Wildcard fangen konnten:

Host jumphost 
    Hostname host.mydomain 

Host *.mydomain 
    ProxyCommand ssh -W %h:%p jumphost 

Für den zweiten Teil muss exec nicht in den Container mit einer Shell eingefügt werden, bevor ein Befehl verwendet wird. Doing docker exec -it app-container tail -f tomcat/logs/catalina.out ist perfekt gültig.

mit der SSH-Konfiguration Kombiniert man eine Pseudo-TTY zuordnen kann (-t) und führen Sie dann nur einen Befehl:

ssh -t another-host docker exec -it app-container tail -f tomcat/logs/catalina.out 
+0

+1 für einige nette SSH-Funktionen (einschließlich der Option, tty zu aktivieren). OP wird das nicht für einen einfachen "Schwanz" brauchen, aber vielleicht später für andere Dinge :) –

Verwandte Themen