Come inviare ssh a un server che non riesco a raggiungere direttamente?


17

Contesto

Sto eseguendo Ubuntu Desktop come la mia macchina principale, che chiamerò D. Voglio collegarmi al server S tramite ssh, ma il firewall mi sta bloccando.

Ho accesso al server S, tramite un percorso molto ingombrante, che coinvolge una macchina virtuale Windows e PuTTY . Questo rende estremamente fastidioso lavorare con questo server: ambiente completamente diverso, copia / incolla non funziona, non riesco a usare correttamente il mio desktop mentre sono connesso ad esso (Alt-Tab è rotto dalla Macchina Virtuale) ecc

Ho verificato che posso ssh dal server S alla mia macchina desktop D (l'opposto di quello che mi serve).

Potrei in qualche modo avviare "port forwarding" o simile dal server, in modo da poter inviare ssh al server dal mio desktop?


2
Salta i padroni di casa ... devi amarli !!!
RonJohn,

Possibile duplicato del tunnel SSH da A-> B-> C
muru

@muru questo è uno scenario diverso, ma ovviamente correlato (dopo tutto riguarda il tunneling!). In questo caso, voglio falsificare D->SabusandoS->D
dangonfast del

Risposte:


32

È possibile utilizzare il comando seguente per impostare un tunnel SSH dal server remoto al computer locale:

$ ssh -f -N -R 1234:localhost:22 user@your_machine_ip

Quando il tunnel è impostato, puoi semplicemente ssh sul tuo server remoto usando il seguente comando:

$ ssh -p 1234 user@localhost

Si noti che è necessario impostare i tasti ssh per l'accesso automatico (nessuna richiesta di password). Se si desidera creare il tunnel SSH in modo interattivo, è possibile rimuovere le opzioni -f -N. Per ulteriori informazioni, man ssh.


Come funziona questo tunnel attraverso la VM di Windows? (Dove lavoro, ci sono più livelli di firewall e solo alcune porte sono aperte.)
RonJohn

@RonJohn Credo che questo usi il fatto che (per OP) lo ssh-ing dal server al desktop funziona, quindi questo imposta un tunnel dal server (porta 22) direttamente alla macchina desktop (porta 1234) che può essere usato per connettersi a ssh sul server (che utilizza la porta 22). La VM di Windows viene utilizzata solo per configurare il tunnel. (per favore correggimi se sbaglio)
pizzapants184

@dangonfast Oltre alla risposta potresti trovare il seguente documento di valore: spencerstirling.com/computergeek/sshtunnel.html
Pryftan

@RonJohn Il documento che ho appena collegato potrebbe aiutare a rispondere anche a quella domanda, almeno per quanto riguarda più strati di firewall ecc. (Se la memoria mi serve bene - è da molto tempo che l'ho letto .. ricordato di avere il link di anni fa).
Pryftan,

1
@ pizzapants184 in effetti, quello era il mio punto di partenza: ssh da S -> D, quindi voglio abusare di questo per fare efficacemente D -> S, anche se questo non funziona in modo diretto. Perché la rete è configurata in questo modo, è qualcosa che mi sfugge. Potrebbe essere intenzionale o una configurazione errata, ma fintanto che funziona per me ...
dangonfast,

5

Se stai utilizzando una versione più recente di OpenSSH (7.3+), puoi usare ProxyJumpciò che combina magicamente tutto insieme:

ssh -J windows_machine remote_server

Quale nei tuoi ~/.ssh/configassomiglia a:

Host remote_server
        HostName remote_server
        ProxyJump windows_machine
        User myname

ProxyJumpsupporta sintassi completa SSH, quindi se siete jimsu windows_servere utilizza la porta 2222per SSH. remote_serverè in IP 192.168.0.110da windows_serverallora puoi scrivere:

Host remote_server
        HostName 192.168.0.110
        ProxyJump jim@windows_machine:2222
        User myname

E corro ancorassh remote_server per arrivarci.


Se si esegue una versione precedente di SSH, utilizzare ProxyCommand : questo consente di indicare a SSH di eseguire un comando per stabilire una connessione proxy, prima di eseguire il comando SSH effettivo.

ssh -o ProxyCommand='ssh -W %h:%p windows_machine' remote_server

Questo utilizza l' opzione SSH -W , che è una scorciatoia per la sintassi netcat più arcana .

Nota che, come quando corri ssh remote_server, ora windows_machinedevi assicurarti di utilizzare l'IP della remove_server casella di salto piuttosto che l'IP della tua macchina: potrebbero essere uguali.

È quindi possibile aggiungere questa direttiva al ~/.ssh/configfile:

Host remote_server
  HostName remote_server
  User myname
  ProxyCommand ssh -W %h:%p windows_machine

Ciò significa che se si remote_server vede una macchina diversa da quella vista, windows_machineè possibile inserirlo nella configurazione e continuare a utilizzarlo ssh remote_server.


1
Questa è una risposta molto migliore.
Robert Riedl,

Sebbene utile, questo non risponde alla domanda che viene posta. OP afferma che non possono SSH da D-> S (cosa vogliono), ma possono SSH da S-> D. Non ci sono proxy SSH in mezzo (c'è invece la macchina virtuale Windows, probabilmente accessibile da RDP).
martedì

@mbrig davvero. Non ho provato questa soluzione, ma sarei sorpreso se funzionasse: sono
protetto

Ma dici che puoi arrivare alla macchina di Windows - da questo ho capito che può fungere da scatola di derivazione tra te e l'altra macchina.
Boris the Spider,

1
Posso accedere al computer Windows con uno strumento propietario (VMWare Horizon). Non ho mai detto di poterlo fare. Ho anche provato questo prima di pubblicare questa domanda installando il server ssh compagno Putty (ho dimenticato il nome), ma i miei test fallirono. Suppongo che anche ssh sia protetto da firewall nella sottorete di Windows.
dangonfast,

1

Invece di provare a eludere le cose e creare un percorso contorto, non puoi semplicemente chiedere a SSH dal desktop al server di essere autorizzato? Se ne hai bisogno e dovresti accedere al server, non vedo perché la richiesta venga rifiutata.


Ti interessa spiegare il downvote? La domanda è "Come si fa a ssh su un server che non riesco a raggiungere direttamente?" quindi la mia risposta per mettere in atto una regola firewall per consentirla è valida. È anche il modo corretto di aggirarlo secondo le buone pratiche di sicurezza.
Solarflare,

Sono alla prima settimana di un contratto di tre mesi di un grande cliente aziendale. Non mi è stato dato un laptop (io uso il mio) e appena una scrivania. Ho avuto dozzine di credenziali per utilizzare i diversi servizi e riesco a malapena a destreggiarmi. Quello che voglio fare non è un duro requisito per svolgere il mio lavoro: posso lavorare nella VM, ed è quello che il mio capo mi dirà se comincio a fare domande divertenti. Oppure mi indicherà l'Help Desk che darà dei calci alla lattina lungo la strada per il prossimo paio di settimane / mesi.
dangonfast,

Per me lavorare nella VM significherà facilmente una perdita di produttività del 50%, quindi voglio evitarlo il più possibile. Adoro questo concerto!
dangonfast,

1
Posso capirlo. Nella mia esperienza, i "grandi clienti aziendali" tendono ad essere piuttosto turbati quando gli appaltatori aggirano i firewall e le politiche per fare il loro lavoro, anche se per scopi altruistici. Il fatto che sia possibile SSH dal server al desktop mi dice che o non essere in grado di fare il contrario è una svista o qualcosa che è stato messo in atto per uno scopo specifico.
Solarflare,

4
Questa è l'unica vera soluzione se vuoi evitare il rischio di essere licenziato per eludere le politiche ... Per lo meno, parla con le persone responsabili prima di utilizzare la soluzione Khaleds in modo che sappiano cosa stai facendo.
Sven
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.