Angenommen, ich habe über SSH eine Verbindung zu einem Remotecomputer hergestellt. In einem Programm auf diesem Remotecomputer muss auf meinem lokalen Computer (dem Verbindungsinitiator) ein Befehl ausgeführt werden.
Was die Frage aufwirft: Ist es möglich, auf die bestehende Verbindung zwischen den beiden Computern zuzugreifen, um einen Befehl auf dem lokalen Computer auszuführen?
Ich habe überlegt, den Befehl ssh user@host-of-connecting-party <command>
auf dem Remotecomputer auszuführen, um eine umgekehrte Verbindung herzustellen. Dies ist jedoch schwieriger zu automatisieren und erfordert Benutzereingriffe. Ich hatte gehofft, ich könnte es vollständig automatisieren oder zumindest den Benutzer / Hostnamen des verbundenen Benutzers erkennen.
quelle
Antworten:
Ich habe manchmal einen ähnlichen Bedarf, solange ich über Putty eine Verbindung zu unserem VPN-Server und von dort über ssh zu einem anderen Host herstelle, der für mich aufgrund der VPN-Einrichtung nicht direkt erreichbar ist.
Manchmal muss ich nur schnell etwas auf einem VPN-Server überprüfen, während meine "ssh-session" noch läuft. Ein Ansatz besteht darin, eine SSH-Sitzung unter auszuführen
screen
, bei der, wie ich bemerkt habe, im Vergleich zu "normalem SSH" eine gewisse Verzögerung auftritt. Ein anderer Ansatz, den ich hier teilen möchte, ist der folgende:Drücken Sie während der SSH-Sitzung, Enterdann ~, (stellen Sie sicher, dass es nicht angezeigt wird, dh Sie befinden sich in einem Befehlsmodus), dann Ctrl- Z. Dadurch wird der ssh-Client-Prozess auf einem "Host" in den Hintergrund gestellt, und Sie haben folgende Möglichkeiten:
Jetzt sind Sie auf dem "Host", können tun, was Sie wollen (obwohl ich nicht sicher bin, wie lange die SSH-Sitzung am Leben bleibt), und kehren dann zur SSH-Sitzung zurück, indem Sie sie ausführen
fg
.Zumindest funktioniert dies für mich, während ich von einer Win10-Workstation über Putty auf einer CentOS-basierten VM verbunden bin und von dieser VM über SSH eine Verbindung zu einem anderen Host herstelle.
Hoffe es hilft jemandem!
quelle
PermitLocalCommand yes
in Ihrer haben.ssh/config
, können Sie das auch tun<Enter>~C
, dann!<command>
.@ 62mkvs Antwort ist eine viel bessere Lösung. Verwende das.
Der Vollständigkeit halber und der Neugier halber können Sie, wenn auf Ihrem lokalen Computer ein SSH-Server ausgeführt wird, einen SSH-Tunnel erstellen, um SSH-Verbindungen vom Remote-Host auf Port 20202 zurück zum lokalen auf Port 22 zuzulassen. Beispielbefehl:
Dadurch wird eine SSH-Verbindung hergestellt, es wird jedoch auch ein Tunnel zum auf Ihrem Computer ausgeführten SSH-Server eingerichtet. Dann können Sie dies tun, wenn Sie in den Remote-Host ssh'ed:
Dies kann natürlich schnell verwirrend werden - insbesondere, wenn die Technik mehr als einmal verschachtelt ist. Dies erhöht auch die Latenz, da alles, was Sie auf Ihrem lokalen Computer ausführen, über den Remote-Host übertragen wird.
Zusätzliche Informationen zu SSH-Tunneling für diejenigen, deren Neugier noch nicht befriedigt wurde, finden Sie in der Antwort auf diese Unix-Stapelaustausch-Frage .
quelle
Wenn sowohl Ihr lokaler als auch Ihr Remotecomputer über das Internet erreichbar sind, können Sie einfach eine SSH-Sitzung von Ihrem lokalen Computer auf dem Remotecomputer aus öffnen und dann in dieser Sitzung eine weitere SSH-Sitzung vom Remotecomputer auf dem lokalen Computer aus öffnen:
Informationen zur Automatisierung finden Sie unter Fabric (Python-Kenntnisse erforderlich).
quelle
Sie können sshpass verwenden , um eine Verbindung zum Remotecomputer herzustellen und die Befehle auszuführen.
Verwenden Sie ein einfaches Shell-Skript auf dem lokalen Computer und verwenden Sie den obigen Code, wenn Sie Befehle auf einem Remotecomputer ausführen möchten. Dies ist eine der Methoden, die ich normalerweise in der Automatisierung verwende.
quelle
Nein, Sie können nicht in die bestehende Sitzung einsteigen.
Ihre Anwendung benötigt eine Möglichkeit, um wieder eine Verbindung zum Client herzustellen. SSH würde funktionieren, wenn auf dem Client ein SSH-Server ausgeführt wird und der Server Port 22 auf dem Client erreichen kann. Es wäre nicht schwer zu automatisieren, wenn Sie eine schlüsselbasierte Authentifizierung anstelle einer Kennwortauthentifizierung verwenden würden. Auf diese Weise wäre kein Benutzereingriff erforderlich.
Informationen zum Einrichten der schlüsselbasierten Authentifizierung finden Sie hier: http://tombuntu.com/index.php/2008/02/20/public-key-authentication-for-ssh-made-easy/
quelle
Wenn Sie Zugriff auf ein anderes Terminal haben, können Sie SIGSTOP mit "kill -19 PID" an den Befehl ssh senden, der die Verbindung initiiert hat. Sie erhalten dann die Kontrolle über das Terminal auf dem Client-Computer. Sobald Sie fertig sind, können Sie die SSH-Verbindung wiederherstellen, indem Sie einfach fg eingeben, um den SSH-Client zu aktivieren.
Aber natürlich ist die Frage hier: Wenn Sie bereits ein Terminal auf dem Client-Computer haben, warum würden Sie dies tun :)
quelle