Cum se specifică portul pentru scp pentru un server la distanță?

Am două noduri la distanță pe care încerc să le trimit fișiere de la unul la altul.

scp remote1:~/testSCP [email protected]:~/ 

Am ~/ssh/config configurat în mașina mea locală, astfel că folosește portul 2222 în mod implicit.

Dar portul ssh implicit al remote1 este setat la 22 în configurația ssh în loc de portul 2222. Deci, pentru a face orice conexiune externă prin ssh, folosește implicit portul 22.

Am încercat următoarele care nu au funcționat:

scp -P 2222 remote1:~/testSCP [email protected]:~/ 

De asemenea, am încercat următoarele, care, de asemenea, nu au funcționat:

scp remote1:~/testSCP -P 2222 [email protected]:~/ 

Pentru ambele am primit următoarea eroare:

ssh: connect to host 10.0.1.10 port 22: Connection refused lost connection 

Ceea ce este adevărat deoarece 10.0.1.10 folosește portul 2222 și nu portul 22.

Cum pot specifica remote1 pentru a utiliza portul 2222 atunci când încerc să trimit fișiere către (remote2) din remote1?

Actualizați

După ce ați încercat

 scp -3 remote1:~/testSCP [email protected]:~/ 

Am un comportament ciudat. Chiar dacă parola mea este corectă, îmi oferă următoarea ieșire:

[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: 

Nu am activat încă autentificarea fără cheie.

Actualizare nouă

După ce am încercat-o în mai multe moduri, am reușit să o fac în scripturile mele conectându-mă la remote1 prin ssh de la localhost-ul meu și apoi scp de la remote1 la remote2. Cu toate acestea, acest lucru nu răspunde la întrebarea mea. Am intenționat să o fac direct de pe mașina mea locală, apoi să transfer fișiere între două instanțe, ceea ce cred că nu este acceptat în cazul în care daemonii ssh de două instanțe folosesc un port diferit de cel implicit pentru conexiunea ssh.

Comentarii

  • stackoverflow.com/questions/10341032/… s-ar putea să vă ajute
  • Am încercat cele așa cum am menționat în întrebarea mea. Nu părea să funcționeze pentru mine
  • localhost ascultând portul 22, dar în configurația ssh este specificat atât pentru remote1 până la remote2 la portul 2222. Da, am vrut să spun ~/.ssh/config În telecomanda 1 și la distanță portul implicit din ~ / .ssh / config este neschimbat, deci portul său implicit 22. Îi pot edita, dar eu aș dori să o fac folosind un singur liner, în loc să editați fiecare configurație ssh de fiecare dată.
  • Ok. Vă ' vă sugerez să vă editați întrebarea, adăugând că puteți, dar ' nu doriți să editați fișiere. Apoi, puteți ssh într-una către gazdele la distanță și să emiteți un simplu scp de acolo sau să o faceți într-o singură linie cu ceva ca ssh -t -p <remote1 port> user1@remote1 'scp -P <remote2 port> user2@remote2:/source/path /dest/path'. De asemenea, ați câștigat ' nu trebuie să editați fișierele config de fiecare dată: o singură dată pentru fiecare cuplu de gazde (de ex. Setarea portului pentru conectarea la remote2 pe remote1), dar, desigur, s-ar putea să vă simțiți inconfortabil, în funcție de numărul de gazde pe care îl aveți.
  • Da, asta răspunde la întrebarea dvs. " Nu " este un răspuns și este răspunsul , indiferent dacă îți place sau nu.

Răspunde

Nu poți face asta cu un simplu scp de la distanță la distanță [1].

În loc de aceasta, ssh la prima gazdă la distanță și rulați scp cu un argument port de acolo:

ssh -p 2222 ruser1@rhost1 scp -P 2222 /rpath/1 ruser2@rhost2:/rpath/2 

Dacă doriți să faceți exact ceea ce face scp, puteți adăuga și opțiunile -n -x -oClearAllForwardings=yes la ssh, deși „de obicei nu este necesar.


[1]: versiunile mai noi ale scp acceptă o specificație uri (inclusiv un port) în loc de host:path, dar numai atunci când utilizați opțiunea -3 („treceți prin gazda locală”).

Deci, probabil că ați putea utiliza

scp -3 -P 2222 ruser1@rhost1:/rpath/1 scp://ruser2@rhost2:2222//rpath/2 

(observați că / după host[:port] nu face parte din cale – se va referi la ./file în directorul de pornire user„).

copierea prin localhost este mai lentă și, din experiența mea, va ascunde erorile. De exemplu, acest lucru nu va imprima niciun mesaj de eroare, în ciuda faptului că nu a putut crea niciun fișier /foo/bar/baz:

scp -3 localhost:.bashrc localhost:/foo/bar/baz 

Nu am aprofundat acest lucru – l-am evitat 😉


Dacă cineva nu este convins de toate acestea, se poate uita la cod sursă :

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"); } 

Observați că variabila tport este setată numai analizând un scp:// uri și pur și simplu nu există în versiuni mai vechi de 7.6p1 (oct 2017).

Comentarii

  • Ați putea explica ce face -x -oClearAllForwardings=yes această opțiune în răspunsul dvs., vă rog? De asemenea, mă gândeam dacă se poate face folosind în schimb rsync.
  • -x dezactivează redirecționarea X11 și -oClear.. dezactivează toate redirecționările tcp (în cazul în care oricare dintre ele a fost forțată prin ~/.ssh/config sau /etc/ssh/ssh_config)
  • @RakibFiha rsync spune: " Sursa și destinația nu pot fi ambele la distanță ". Poate că există trucuri în jurul său, dar aceasta ar trebui să fie o întrebare separată.
  • Acum, trebuie să-mi dau seama după explicația dvs. detaliată. (y)

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *