Come assegnare un nome host al tunnel SSH


16

Sto usando ssh root@my.server.ip -g -L 4321:localhost:28017 per stabilire un tunnel dal mio MacBook al mio server dedicato presso il mio provider di hosting. Funziona bene. Ora voglio accedere a diversi siti di amministrazione sul server remoto (una pagina di stato MongoDB, una pagina RabbitMQ ecc., Tutte su porte diverse). Tutti sono associati a 127.0.0.1 sul computer remoto. Come posso modificare questo comando ssh a

  • assegnare un nome al tunnel e utilizzare ad esempio "my.tunnel.name" nel mio browser
  • per poter definire la porta remota nel mio browser; Vorrei connettermi a my.tunnel.name:port, per poter chiamare i diversi siti

Questo è possibile con ssh? Ho letto le pagine man e ho cercato su Google per due giorni, ma non sembra funzionare.

--edit 2012-06-01 23: 36-- Grazie alle risposte e ai commenti forniti, il port forwarding funziona ora

ssh user@remote.server -D 4321

Posso configurarlo come proxy nel mio browser e il browser tratterà qualsiasi richiesta a localhost: anyport come se fosse stato effettuato sul server remoto. L'uso di un nome ora non è necessario, poiché il browser è solo per siti di server remoti.

Risposte:


12

Quello che descrivi non è possibile. Ma ci sono ancora buone notizie:

Ciò che è possibile, tuttavia, è stabilire una connessione dinamica con il server SSH. Questo aprirà una porta sul tuo computer locale a cui puoi puntare l'impostazione Proxy del tuo browser e ti permetterà di usare il tunnel come server proxy. Ma devi digitare un nome host / ip e una porta nel browser come se il browser fosse in esecuzione sul computer su cui si trova il server SSH.

Il comando è simile al seguente: ssh user@server.example.com -D 1234
quindi punta il proxy del browser su localhost:1234.

Pertanto, se si esegue il tunneling nel server A e si desidera connettersi al server B, si digita nel browser qualunque indirizzo si digiti in un browser in esecuzione sul server A. Se un browser in esecuzione sul server A non è in grado di connettersi al server B (se il il processo sul server B è in ascolto solo su 127.0.0.1) quindi non è ancora possibile connettersi. Sembra che tu abbia un solo server, ma volevo essere sicuro che fosse chiaro.

Se hai solo un server, esegui il tunneling con la connessione dinamica, imposta il proxy. Sarai quindi in grado di digitare "localhost: 1234" (ad esempio) nel browser e si connetterà al servizio in esecuzione sul server remoto sulla porta 1234.

Nota sul lato Securit: mai e poi mai impostare un server in cui SSH può essere root! Grave difetto di sicurezza. Crea un normale account utente (a cui è consentito su o sudo) e SSH come tale utente.


2
Stai usando -L 1234 (port forward locale) quando dovresti usare -D 1234 (port forward dinamico). E forse anche evitare di usare -g, -g significa che gli host remoti possono connettersi al tuo forward che non è quello che vuoi se lo stai facendo dalla tua workstation.
Mattias Ahnberg,

Grazie Chris. L'ho già provato. Non riesco a usare il comando ssh con solo una porta specificata. Restituisce un errore: "Specifica di inoltro locale non
valida

@ matthias-ahnberg: Fantastico, ha fatto il trucco. con l'inoltro dinamico, ora posso usare la porta come proxy e localhost: le chiamate di alcuni porti sono dirette al server remoto.
brains_at_work

@MattiasAhnberg Wow, che brainfart. Grazie per la correzione.
Chris S,

Ho seguito questo processo ma ho ricevuto l'errore "La connessione è stata ripristinata" in Firefox.
Rivu,

23

È possibile assegnare un nome utilizzando il fatto che l'adattatore di loopback risponderà sostanzialmente a qualsiasi indirizzo nella rete 127.0.0.0/8.

Quindi, invece di associarlo alla porta 4321, è possibile associare 127.1.2.3:4321. Quindi imposta semplicemente una voce host che associ un nome all'indirizzo di loopback che hai utilizzato in modo da mappare foo.bar 127.1.2.3.

Nella mia configurazione SSH sulla mia workstation di amministrazione ho molti tunnel configurati in modo che si leghino ad un indirizzo nell'intervallo di loopback, e ho voci nel mio file host in modo da aprire molti tunnel in parallelo usando la stessa porta e distinguerli tramite nome.

Quindi se ti connetti in questo modo

ssh root@my.server.ip -g -L 127.1.2.3:4321:localhost:28017

E il tuo file hosts ha una linea come questa.

127.1.2.3 my.tunnel.name

Quindi dovresti essere in grado di connetterti a my.tunnel.name:4321 dal tuo computer locale.

Se hai uno spazio di indirizzi IP aggiuntivo sulla rete a cui è connesso il tuo client ssh, potresti persino assegnare un indirizzo secondario alla tua interfaccia Ethernet e utilizzare uno dei tuoi IP reali, quindi impostare voci nel tuo DNS se volevi che altri sistemi fossero in grado per usare il tuo tunnel SSH.

L'opzione -L -L [bind_address:]port:host:hostportti consentirà di utilizzare qualsiasi indirizzo IP valido sul sistema locale a cui eseguire il binding. È necessario includere anche l' -gopzione se si desidera che altri host possano connettersi tramite il tunnel ssh.


Ho dovuto aggiungere l'ip al mio loopback in osx. ifconfig l0 alias 127.0.1.1 255.255.255.0altrimenti ottimo consiglio!
devians

1
Se non si desidera creare una shell, eseguire -Nalla fine del comando. In questo modo è più facile ricordare che si tratta di un tunnel, non di qualsiasi connessione SSH.
mlissner,

Durante l'utilizzo 127.1.2.3dovevo farlo sul mio macbook:, ifconfig lo0 alias 127.1.2.3 255.255.255.0che aggiunge 127.1.2.3come nuovo indirizzo sull'interfaccia lo0.
Donn Lee,

5

Crea un port forwarding dinamico a livello di applicazione (fondamentalmente socks proxy) con il tuo tunnel SSH, quindi indirizza le tue applicazioni attraverso questo. Per creare un tunnel dinamico, connettersi come segue:

ssh user@host.domain.com -D 127.0.0.1:31337

Quindi configurare l'applicazione per utilizzarla come proxy SOCKSv5.

Se vuoi un nome host associato a questo, aggiungi solo /etc/hostsvoci che puntano a 127.0.0.1, ma un modo più carino potrebbe essere quello di aggiungere 127.0.0.2 per il primo tunnel e una voce host per questo, 127.0.0.3 per il secondo tunnel e una voce host separata per questo, ecc. Se aggiungi alias per 127.0.0.1, a volte questo alias apparirà in altre ricerche di comandi di localhost che possono creare confusione!

Per utilizzarlo senza problemi in un browser Web è possibile utilizzare un componente aggiuntivo proxy, ad esempio preferisco il browser Web Chrome e per questo utilizzo un componente aggiuntivo chiamato Proxy Switchy!. Puoi scaricarlo qui:
https://chrome.google.com/webstore/detail/caehdcpeofiiigpdhbabniblemipncjj

Nella configurazione di questo componente aggiuntivo posso definire diversi proxy separati e quindi associare espressioni regolari di host / URL per utilizzare determinati proxy, in questo modo sarò sempre reindirizzato correttamente attraverso i tunnel giusti senza dover passare manualmente. Per favore fatemi sapere se avete bisogno di ulteriori chiarimenti su uno dei passaggi!


Grazie per il suggerimento aggiuntivo. Poiché utilizzo anche Chrome, non devo tenere aperto anche FireFox.
brains_at_work,
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.