SCP tramite connessione gateway SSH


8

Il layout della mia rete è simile al seguente:

Ora Alice ha accesso al gateway SSH (solo gateway da ora in poi) con:

ssh alice@external.ip

e il file delle chiavi autorizzato sul gateway è simile al seguente

#/home/Alice/.ssh/authorized_keys
command="ssh -t alice@web" ssh-rsa ABCD...E== alice@somehost

così quando Alice prova a connettersi al Gateway con la sua chiave privata, in realtà viene connessa al server Web (il pc gateway può stabilire una connessione al server Web con una chiave privata senza password, in modo che rimanga trasparente).

La domanda

  1. Come posso impostarlo in modo che Alice sia in grado di scappare le cose anche sul web server?

  2. So che questo crea una connessione separata, ma c'è un modo per farlo funzionare come un normale ssh in modo che anche qualcosa del genere -R12345:localhost:22funzioni?

Risposte:


10

Se si desidera accedere a un server SSH dietro un altro server SSH, utilizzare semplicemente "ProxyCommand". Esempio: aggiungi a .ssh / config

Host Alice  
   User myLoginAtAlice # optional 
   ProxyCommand ssh -o Compression=no gateway netcat -w 90 %h %p
   ServerAliveInterval 30
   Compression yes

Host gateway
   HostName gateway.public.ip
   User myLoginAtTheGateway # optional 
   Compression yes

Quindi, puoi semplicemente "ssh Alice" o "rsync" o "scp" usando direttamente "Alice" come nome host. La magia è nascosta al cliente.

Ciò ti consente di riconfigurare rapidamente il tuo ssh nel caso in cui la topologia di rete / la configurazione cambino e cambiare semplicemente .ssh / config, invece di cambiare ogni script.

Spiegazione: ssh utilizza il comando fornito come "comando proxy" come trasporto anziché una connessione TCP diretta. Netcat è uno strumento di rete che (tra milioni di altre funzionalità) reindirizza semplicemente il suo stdin / stdout all'host remoto specificato. Quindi, "ssh gateway nc sshserver 22" ti connette al server ssh di quella macchina. % h è il nome host e% p è la porta. Tale impostazione consente di specificare "Porta N" per modificare la porta senza modificare la riga ProxyCommand.

Attivo la compressione sul computer finale e disabilito la compressione esterna poiché la compressione di dati crittografati o compressi non riduce ulteriormente il volume di dati. Ovviamente anche qualsiasi giocherellamento con le impostazioni di compressione è facoltativo.


Un'altra domanda, rysnc non funziona in questo modo se ho una porta personalizzata per la macchina gateway. Qualche idea su questo.
zidarsk8,

Aggiungi "Port numero_porta" alla sezione pertinente di .ssh / config. Leggere le pagine man di ssh_config e sshd_config. Sono molte informazioni e potrebbero portarti molta ispirazione.
Raúl Salinas-Monteagudo,

Volevo dire, rsync non funziona se viene specificata una porta diversa. Ho configurato la porta in modo che la connessione funzioni normalmente, ma rsync mi sta causando problemi.
zidarsk8,

3

Ho avuto esattamente lo stesso problema, ma l'ho fatto funzionare senza cambiare radicalmente tutto.

Tutto quello che ho fatto è stato aggiungere $ SSH_ORIGINAL_COMMAND al gateway authorized_keys per passare qualsiasi cosa lungo la catena al server finale.

Così questo:

#/home/Alice/.ssh/authorized_keys
command="ssh -t alice@web" ssh-rsa ABCD...E== alice@somehost

diventa:

#/home/Alice/.ssh/authorized_keys
command="ssh -q -t alice@web $SSH_ORIGINAL_COMMAND" ssh-rsa ABCD...E== alice@somehost

-Q viene utilizzato per sopprimere il messaggio di connessione chiusa dalla macchina del punto finale in modo che non finisca nell'output locale se si utilizza il reindirizzamento locale.

È quindi possibile utilizzare SCP in questo modo:

scp localFileName alice@exernal.ip:/path/on/end/point/remoteFileName

Ciò ha l'ulteriore vantaggio di consentire agli utenti di passare il comando attraverso i comandi al server dell'endpoint e di ottenere il risultato nella loro sessione locale in modo da poterli reindirizzare in un file o inoltrarli a un altro programma.

Per esempio:

ssh -t alice@external.ip "ls -l" > tmp

Questo perché sembra che sshd popoli la variabile di ambiente $ SSH_ORIGINAL_COMMAND con e il comando specificato dal client ssh, ma non sono sicuro del perché questo miracolosamente consenta a scp di passare al computer endpoint e ai comandi.


0

Sfortunatamente il port forwarding non aiuterebbe a copiare i file direttamente dalla workstation di Alice sul web server usando scp. In questo post SO ho spiegato perché ssh (e scp in quanto utilizza gli stessi meccanismi di autenticazione) non funzionerà per le connessioni port forwarding usando ssh.

L'opzione sarebbe quella di configurare un server VPN sulla macchina che ora agisce come gateway SSH, connettersi ad esso e quindi avere accesso diretto a qualsiasi macchina dietro il firewall.

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.