Come posso SCP un file attraverso un server intermedio?


15

Sto usando Ccygwin su WinXP (con la shell bash). Voglio SCP un file dal mio localhost su una macchina remota - host2. Tuttavia, posso solo SSH su una macchina intermedia - host1, e quindi da lì SSH a host2. (Nota, non riesco ad accedere a host2 dal mio localhost).

Pensavo che il tunneling fosse la mia risposta, ma quando provo a creare un tunnel

ssh -L 9999:localhost:9998 dalvarado@host1 'ssh -L 9998:localhost:1234 -N dalvarado@host2'

Ma dopo aver digitato questo comando e aver premuto Invio, il sistema si blocca. Qual è il modo corretto di impostare un tunnel e quindi SCP un file dopo?

Grazie, -


2
Duplica di superuser.com/questions/174160/… - vedi la mia risposta di seguito per un riepilogo.
jmetz,


Possibile duplicato di file scp tramite host intermedio
tripleee

Risposte:


17

Questo è già stato risposto meglio qui .

Per riassumere: inserire quanto segue ~/.ssh/config

Host target.machine
User          targetuser
HostName      target.machine
ProxyCommand  ssh proxyuser@proxy.machine nc %h %p 2> /dev/null

e quindi semplicemente scptarget.machine ogni volta che vuoi fare il proxy tramite proxy.machine!

Funziona anche per ssh, quindi ti farà risparmiare tempo anche sulla macchina target.

Il merito va a user24925 che ha risposto a questo nel 2011.


13

Per impostare un tunnel SSH, utilizzare il seguente formato:

ssh -L 9999:host2:22 user@host1

Questo comando si connette a host1as usere esegue il tunneling della porta 9999 sul computer che emette il comando alla porta 22 su host2. -Nè facoltativo oppure puoi usare qualcosa di simile topo watchper mantenere viva la sessione, se necessario.

Quindi, semplicemente scpsu host2 su localhost: 9999.


1
Quando eseguo questo comando, dovrei finire per accedere a host1? Inoltre, dopo aver eseguito questo comando, ho aperto un'altra shell bash ed eseguito "scp hello.txt localhost: 9999", ma ho ricevuto un errore "ssh: connessione all'host localhost porta 22: Connessione rifiutata". Cosa sto facendo di sbagliato qui?
Dave,

3
Quando esegui questo comando, verrai connesso a host1, sì. La scpsintassi del comando non è corretta. Prova qui scp -P 9999 hello.txt user@localhost:/path/to/destination/filedove si usertrova l'utente su host2cui desideri accedere.
Pioggia

1
@Rain, potresti inserire questo esempio nella risposta principale;)
dmeu,

5

Da OpenSSH 7.3 , è possibile utilizzare -Jo -o ProxyJumpper specificare l'host bastion / jump. Pertanto, a SSH node2tramite node1:

ssh -J you@node1 you@node2

SCP non ha l' -Jargomento, ma lo consente -o, quindi funziona:

scp -o ProxyJump=you@node1 file.txt you@node2:~

3

Puoi prima scp il file su host1, in questo modo:

scp file dalvarado@host1:.

Quindi fai questo per portarlo su host2:

ssh -t dalvarado@host1 'scp file dalvarado@host2:.'

L' -topzione per sshcostringerlo ad allocare uno pseudo-terminale, che potrebbe rendere più semplice per scphost1 richiedere una passphrase / password. Se ssh-agent è in esecuzione e configurato dappertutto, non dovresti ricevere una passphrase / password.

Offro questa alternativa, perché se avessi usato un tunnel, avresti comunque bisogno di due comandi: uno per impostare il tunnel e uno per copiare il file attraverso di esso. Sembra più semplice.


Soluzione fantastica !!!
Riccardo,
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.