Wie verbinde ich mich mit ssh über einen anderen PC mit einem PC?


12

Ich habe drei Computer.

PC1 und PC2 ist auf einem privaten LAN, wo PC1 bis bekannt ist , PC2 als192.168.0.2

PC2 und PC3 befindet sich auf einem anderen LAN, wo PC2 zu bekannt ist PC3 als192.168.123.101

Wie kann ich mit SSH von PC3 aus eine Verbindung zu PC1 herstellen ?

Gibt es so etwas wie:

ssh user@192.168.0.2 -via user@192.168.123.101

Antworten:


18
ssh -o 'ProxyCommand ssh -W %h:%p user@192.168.123.101'

Dann kannst du einfach rennen ssh PC1 .

Am besten über einen Alias ​​in ~/.ssh/config:

Host PC1
HostName 192.168.0.2
User user
ProxyCommand ssh -W %h:%p user@192.168.123.101

-WStellen Sie für ältere Versionen von OpenSSH, die diese Option nicht haben (ich denke, dies bedeutet ≤5,4), sicher, dass netcat auf PC2 verfügbar ist, und verwenden Sie es

Host PC1
HostName 192.168.0.2
User user
ProxyCommand ssh user@192.168.123.101 nc %h %p

1
+1 Ja, und ich habe eine ähnliche Antwort stackoverflow.com/questions/1010808/1122282#1122282 mit einigen weiteren Details.
Ephemient

benötigt, um netcat zu installieren
Stefan

3

Mit SSH gibt es eine klare Lösung:

  1. Richten Sie Ihren Computer auf Ihrem lokalen Computer ~/.ssh/configso ein, dass er Folgendes aufweist:

    host WhatYouWillCallTheConnection
        hostname the.gateway.server.address.com
        user YourUsernameOnTheGateway
    
  2. Stellen Sie sowohl auf dem Gateway als auch auf dem Endserver, zu dem Sie eine Verbindung herstellen möchten, sicher, dass sich die öffentlichen Schlüssel Ihres lokalen Clients in der befinden ~/.ssh/authorized_keys

  3. Auf dem Gateway-Computer müssen Sie das ~/.ssh/authorized_keysso ändern , dass Sie am Anfang der Zeile, die den öffentlichen Schlüssel Ihres Clients angibt, den erzwungenen Befehl wie folgt hinzufügen:

    command="ssh -A user_name@ServerTheGatewaySees.ButTheClientCant.net" ...yourPublicKey....
    

Das -A ist den Agenten weiterleiten , wenn Sie nicht wie Passwörter die ganze Zeit zu schicken ...

Auf diese Weise ssh WhatYouWillCallTheConnectionläuft jedes Mal, wenn Sie so etwas tun, direkt durch das Gateway und Sie werden transparent mit dem Server auf der anderen Seite verbunden.


2
Nicht verwenden, ssh -Awenn Sie dem Administrator des Gateway-Computers nicht vertrauen. Er kann Ihren privaten Schlüssel nicht erhalten, aber solange Sie mit dem Gateway verbunden sind ssh -A, kann er den weitergeleiteten Agenten verwenden, um eine Verbindung zu anderen Computern wie Ihnen herzustellen.
Jander

2

Die Portweiterleitung kann nützlich sein.
Von PC1:

~# ssh -fN -L 22:PC3:7777 -l <user> PC2  

7777 kann einfach ein beliebiger Port sein (vorausgesetzt, er wird noch nicht verwendet). Ich mag nur diese Nummer und jede "Bestellung", die ich mit +1 (7778, 7779 usw. usw.) verwalten kann.

Wenn Sie dies getan haben, haben Sie einen "transparenten" Tunnel vom lokalen Port 7777 von PC1 zum Port 22 von PC3. Problem:

~# ssh -l <user> -p 7777 localhost  

Und du solltest auf PC3 sein.
Sie können -D auch verwenden, um einen Port dynamisch weiterzuleiten, wenn ein SOCKS-Proxy eingerichtet werden soll.

~# ssh -D <someport> -fN -L 22:PC3:7777 -l <user> PC2  

Prost!


0

Die einzige Lösung, die ich dafür kenne, ist SSH-Scripting mit Belier :

Belier ermöglicht das Öffnen einer Shell oder das Ausführen eines Befehls auf einem Remotecomputer über eine SSH-Verbindung. Das Hauptmerkmal von Belier ist die Fähigkeit, mehrere Zwischencomputer zu überqueren, bevor der Auftrag ausgeführt wird.

Vor einiger Zeit habe ich diesen README.sshhop auf der MIT Lincoln Laboratory Homepage gefunden, aber ich konnte keine weiteren Informationen dazu finden. Weiß jemand mehr?


0

Die Antwort 2017+ (seit v7.3) lautet:

ssh -o "ProxyJump user@jumphost" user@destination

Dies kann verkürzt werden ssh destmit a ~/.ssh/configals solchem:

Host jump
    User MyJumpHostUser
    Hostname Jump.host.tld

Host dest
    ProxyJump jump
    User MyDestUser
    Hostname des.tin.ati.on
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.