Come specificare la porta per scp per un server remoto?

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

  • stackoverflow.com/questions/10341032/… potrebbe aiutarti
  • Ho provato quelli come ho menzionato nella mia domanda. Non sembra funzionare per me
  • localhost che ascolta la porta 22 ma in ssh config è specificato sia per remote1 che per remote2 alla porta 2222. Sì, intendevo ~/.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.
  • Ok. ' suggerirei di modificare la tua domanda, aggiungendo che puoi, ma ' non sei disposto a, modificare il tuo file. Quindi, puoi ssh in uno per gli host remoti e inviare un semplice scp da lì, oppure farlo in una riga con qualcosa come ssh -t -p <remote1 port> user1@remote1 'scp -P <remote2 port> user2@remote2:/source/path /dest/path'. Inoltre, ' non dovrai modificare i config file ogni volta: solo una volta per ogni coppia di host (ad es. Impostando la porta per collegandosi a remote2 su remote1), ma ovviamente potresti non sentirti a tuo agio, a seconda del numero di host che hai.
  • Sì, questo risponde alla tua domanda. " No " è una risposta ed è la risposta, non importa se ti piaccia o no.

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 utilizzando rsync.
  • -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)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *