Inoltra SSH attraverso il tunnel SSH


30

La mia situazione :

Me (localhost) -> Server A (ip: 100.100.100.100) => (server B (ip: 192.168.25.100), server ....)

Sono in grado di SSH nel server poiché ha un vero IP se poi voglio collegarmi al server b, vorrei ssh server b con il suo IP (192.168.25.100)

esempio:

dal mio pc:

ssh user@100.100.100.100

quindi in 100.100.100.100,

ssh user@192.168.25.100

questo mi porta al server B con ssh

cosa succede se voglio collegarmi direttamente al server b? Come lo posso fare?

esempio:

dal mio oc:

ssh@192.168.25.100

ho provato quanto segue:

ssh -L 22:localhost:22 user@100.100.100.100

senza successo

Risposte:


30

Il tuo problema è nel legare un ascoltatore a localhost: 22; c'è già un sshd che lo ascolta. Il tunneling di una connessione ssh tramite una connessione ssh è completamente lecito, e lo faccio sempre, ma è necessario scegliere porte non utilizzate per i listener di inoltro.

Provare

me% ssh user@100.100.100.100 -L 2201:192.168.25.100:22

poi

me% ssh localhost -p 2201

Dovresti finire sul server B (a meno che qualcosa non sia già legato a me: 2201, nel qual caso, scegli un'altra porta).


Grazie per la risposta rapida! funziona, tuttavia, come posso inoltrare tutte le connessioni anziché solo ssh (22)?
tom91136,

1
Questa è una VPN completa che stai cercando, non solo il port forwarding. C'è un commento su come fare vpn-over-ssh su bodhizazen.net/Tutorials/VPN-Over-SSH , ma richiede l'accesso root remoto tramite ssh su A. Oppure potresti guardare OpenVPN o altre soluzioni VPN, ma ancora, avrai bisogno del privilegio su A per farli funzionare.
MadHatter supporta Monica il

grazie mille, un'ultima cosa, cosa succede se voglio solo collegarmi ad A?
tom91136,

me% ssh user@100.100.100.100; non l'abbiamo già coperto? o intendi "cosa succede se voglio una VPN completa per A?", nel qual caso la mia risposta è valida.
MadHatter supporta Monica il

1
Per le persone che desiderano VPN su SSH, non hanno accesso root sul server ma ha Python, prova sshuttle .
André Paramés,

23

Non è necessario utilizzare il port forwarding ssh per ssh in un computer interno tramite un proxy. È possibile utilizzare la funzione ssh per eseguire un comando sul primo server a cui ci si connette per poter ssh in un terzo computer.

ssh -t user@100.100.100.100 ssh user@192.168.25.100

L' -topzione impone a ssh di allocare una pseudo-tty in modo da poter eseguire un comando interattivo.

Questo può funzionare anche con i tasti ssh. Se si dispone della chiave privata e pubblica sulla macchina A e della chiave pubblica nei file delle chiavi autorizzate sulle macchine B e C, è possibile utilizzare l' -Aopzione per inoltrare la connessione dell'agente di autenticazione.


10

Ho usato una soluzione diversa. Ho usato ProxyCommandun'opzione (qui in ~/.ssh/config):

Host myinsidehost1 myinsidehost2 myinsidehost3
ProxyCommand ssh externalhost ssh %h sshd -i

Questo non imposta alcun tunnel da porta a porta, invece tunnel ssh usando lo standard stdin / out. Questo metodo ha uno svantaggio che ci sono in realtà tre connessioni ssh per l'autenticazione. Ma per connetterti all'host interno devi solo digitare:

ssh myinsidehost2

... quindi non devi preoccuparti di scegliere alcun IP per quel tunnel.


1
Questo è l'unico tipo di stacking SSH che trovo funzionante. Sono stato provato corkscrewo nc( netcat) ma nessuno funziona così facilmente.
Phuong Nguyen,

7

secondo la pagina man di ssh, ProxyCommand è il metodo corretto

la sintassi è:

ProxyCommand ssh -W %h:%p user@jumphost 2> /dev/null

Non sono sicuro che -Wesistesse l' opzione alla risposta a questa domanda. Ma con le versioni più recenti del client ssh, concordo sul fatto che la combinazione di ProxyCommanded -Wè il metodo preferito. Forse aggiungi un po 'di contesto mostrando sia come può essere usato sulla riga di comando sia un esempio di una sezione per .ssh/config.
Kasperd,

Qualche idea su dove trovare i log delle modifiche / informazioni sulla versione che ci dice quali versioni di SSH hanno il -Wcomando e quali no? Un po 'di ricerche su Google non mi hanno dato risposte veloci ...
dmh

-Wè stato introdotto con OpenSSH 5.4, rilasciato nel 2010. Quindi la risposta è sì @kasperd
0xC0000022L

7

A partire da OpenSSH 7.3 (fine 2016) il modo più semplice è l' impostazione ProxyJump . Nel tuo ~/.ssh/config:

Host B
  ProxyJump A

O dalla riga di comando,, -J B.

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.