Ho due nodi remoti a cui sto provando a inviare file da uno allaltro.
scp remote1:~/testSCP [email protected]:~/
Ho ~/ssh/config
configurato nella mia macchina locale, quindi utilizza la porta 2222
per impostazione predefinita.
Ma la porta ssh predefinita di remote1 “è impostata su 22
nella configurazione ssh anziché sulla porta 2222
. Quindi, per fare qualsiasi connessione esterna tramite ssh, utilizza la porta 22
per impostazione predefinita.
Ho provato quanto segue che non ha funzionato:
scp -P 2222 remote1:~/testSCP [email protected]:~/
Ho anche provato quanto segue, che non ha funzionato:
scp remote1:~/testSCP -P 2222 [email protected]:~/
Per entrambi ho ricevuto il seguente errore:
ssh: connect to host 10.0.1.10 port 22: Connection refused lost connection
Il che è vero poiché 10.0.1.10
utilizza la porta 2222
e non la porta 22
.
Come posso specificare remote1 per utilizzare la porta 2222
quando provo a inviare file a (remote2) da remote1
?
Aggiorna
Dopo aver provato
scp -3 remote1:~/testSCP [email protected]:~/
Ottengo un comportamento strano. Anche se la mia password è corretta, mi dà il seguente output:
[email protected]"s password: [email protected]"s password: Permission denied, please try again. [email protected]"s password: Permission denied, please try again. [email protected]"s password:
Non ho ancora abilitato lautenticazione senza chiave.
Nuovo aggiornamento
Dopo averlo provato in diversi modi, sono stato in grado di farlo nei miei script accedendo a remote1 tramite ssh dal mio localhost e poi scp da remote1 a remote2. Tuttavia, questo non risponde alla mia domanda. Avevo intenzione di farlo direttamente dalla mia macchina locale, quindi trasferire i file tra due istanze, che penso non sia supportato se due istanze “daemon ssh utilizzano una porta diversa da quella predefinita per la connessione ssh.
Commenti
Rispondi
Non puoi farlo con un semplice scp da remoto a remoto [1].
Invece, ssh sul primo host remoto ed esegui scp con un argomento di porta da lì:
ssh -p 2222 ruser1@rhost1 scp -P 2222 /rpath/1 ruser2@rhost2:/rpath/2
Se desideri eseguire esattamente ciò che scp
sta facendo, puoi anche aggiungere le -n -x -oClearAllForwardings=yes
opzioni a ssh
, anche se di solito non è necessario.
[1]: le versioni più recenti di scp
supportano una specifica uri (inclusa una porta) invece di host:path
, ma solo quando si utilizza lopzione -3
(“passa attraverso lhost locale”).
Quindi probabilmente potresti utilizzare
scp -3 -P 2222 ruser1@rhost1:/rpath/1 scp://ruser2@rhost2:2222//rpath/2
(nota che /
dopo host[:port]
non fa parte del percorso – farà riferimento a ./file
nella directory home di user
“).
Ma la copia tramite localhost è sia più lenta e, nella mia esperienza, nasconderà gli errori. Ad esempio, questo non stampa alcun messaggio di errore, nonostante non sia possibile creare alcun file /foo/bar/baz
:
scp -3 localhost:.bashrc localhost:/foo/bar/baz
Non sono andato a fondo in questo – lho semplicemente evitato 😉
Se qualcuno non è convinto da tutto questo, può guardare il codice sorgente :
void toremote(char *targ, int argc, char **argv) { ... } else if (host) { /* standard remote to remote */ if (tport != -1 && tport != SSH_DEFAULT_PORT) { /* This would require the remote support URIs */ fatal("target port not supported with two " "remote hosts without the -3 option"); }
Nota che la variabile tport
è impostata solo analizzando un scp://
uri, e semplicemente non esiste nelle versioni precedenti alla 7.6p1 (ottobre 2017).
Commenti
- Potresti spiegare cosa
-x -oClearAllForwardings=yes
fa questa opzione nella tua risposta, per favore? Stavo anche pensando se fosse possibile farlo utilizzandorsync
. -
-x
disabilita linoltro X11 e-oClear..
disabilita tutti gli inoltri TCP (nel caso in cui qualcuno di essi sia stato forzato tramite~/.ssh/config
o/etc/ssh/ssh_config
) - @RakibFiha rsync dice: " Lorigine e la destinazione non possono essere entrambe remote ". Forse ci sono dei trucchi, ma questa dovrebbe essere una domanda a parte.
- Ora, me ne sono reso conto dopo la tua spiegazione dettagliata. (y)
~/.ssh/config
In remoto 1 e remoto la porta predefinita in ~ / .ssh / config è invariata, quindi la sua porta predefinita 22. Posso modificarli, ma posso vorrei farlo utilizzando una riga, invece di modificare ogni configurazione SSH ogni singola volta.ssh
in uno per gli host remoti e inviare un semplicescp
da lì, oppure farlo in una riga con qualcosa comessh -t -p <remote1 port> user1@remote1 'scp -P <remote2 port> user2@remote2:/source/path /dest/path'
. Inoltre, ' non dovrai modificare iconfig
file ogni volta: solo una volta per ogni coppia di host (ad es. Impostando la porta per collegandosi aremote2
suremote1
), ma ovviamente potresti non sentirti a tuo agio, a seconda del numero di host che hai.