Tunnel una connessione ssh attraverso una macchina intermedia in un unico comando


10

Esiste un modo, in un singolo comando, di stabilire una connessione ssh dal mio computer A, attraverso il computer B, al computer C, in modo tale che io abbia accesso alla shell sul computer C?

Una ruga (che sembra escludere semplicemente l'inoltro della connessione ssh usando l'opzione -L) è che ho la password per l'account sul computer B, e l'account sul computer B è autorizzato a connettersi all'account sul computer C, ma Non ho la password per l'account sul computer C.


Risposte:


8

Ho capito che vuoi semplicemente accedere al computer C, non eseguire il tunneling di nulla da A a C. Quindi, questo dovrebbe fare il trucco:

ssh -t computer-b "ssh computer-c"

Potrebbe essere necessario inserire due volte le password, prima per il computer B e poi per il computer C, ma ciò può essere evitato usando l'autenticazione della coppia di chiavi di ssh.


1
Grazie - funziona! Se potessi essere così audace da chiedere un seguito. Qualche idea su come posso scpare un file dalla A alla C in un singolo comando?
sanità mentale

È un po 'complicato. Potrebbe essere fatto aggiungendo tar al mix, ma se è solo un file e il computer B ha lo spazio su disco per trattenerlo per un po ', è molto più facile copiarlo in due passaggi.
af.

Puoi anche farlo tre volte! ssh -t computer-b "ssh -t computer-c 'ssh computer-d'": D
gak


0

Se si utilizzano chiavi ssh, è possibile generare una nuova chiave per la macchina B e utilizzarla per la connessione da A a B. Sulla macchina B, è possibile aggiungere

command="ssh C" ssh-....

nel ~/.ssh/authorized_keysfile. Ciò significa che ogni volta che ti connetti a B con quel tasto ssh, eseguirà il ssh Ccomando.

Non so se questo funziona con SCP.


0

Uso ProxyCommand

Vedere man ssh_config. Consiglio di utilizzare ProxyCommand. Prendiamo il tuo scenario originale:

  • Computer A (il tuo computer)
  • Computer B (un nome host proxy)
  • Computer C (raggiungibile solo tramite SSH dal computer B)

Modifica ~/.ssh/configcon i seguenti contenuti.

Host computerb
    HostName <hostname or IP of Computer B>

Host computerc 192.168.35.*
    ProxyCommand ssh computerb nc -w 180 %h %p

Ora sarai in grado di raggiungere in modo trasparente Computer C. es

ssh computerc

Vantaggi di questo metodo

Più sicuro

Hai solo bisogno della tua chiave privata per essere sul Computer A (il tuo computer). Il nccomando fungerà da proxy in cui SSH crittograferà il traffico. Ciò include l'autenticazione. È una pessima idea distribuire la tua chiave privata su più server (poiché qualsiasi server compromesso con la tua chiave privata alla fine compromette la tua chiave privata).

Abbina più destinazioni

Si può abbinare più computer di destinazione utilizzando Host. Un singolo computer o qualsiasi computer all'interno di una rete specifica (ad esempio 192.168.35.0/24nell'esempio sopra) per eseguire il proxy tramite Computer B. Serve anche come alias.

ssh 192.168.35.27

Nell'esempio sopra, eseguirà il proxy tramite Computer B per raggiungere l'indirizzo IP.

Proxy a catena

Utilizzando questo metodo è possibile eseguire il collegamento in cascata di tutti i proxy automatici necessari. ad esempio è possibile aggiungere un Computer D che è raggiungibile solo dal Computer C e funzionerà in modo trasparente.

Host computerd
    ProxyCommand ssh computerc nc -w 180 %h %p

ssh computerdeseguirà automaticamente il proxy tramite Computer C e Computer B negli ssh_configesempi precedenti .


Sto usando ProxyJump invece di ProxyCommand e funziona benissimo. Sembra che ora ci siano più opzioni.
fgiraldeau,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.