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
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 schimbrsync
. -
-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)
~/.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ă.ssh
într-una către gazdele la distanță și să emiteți un simpluscp
de acolo sau să o faceți într-o singură linie cu ceva cassh -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șiereleconfig
de fiecare dată: o singură dată pentru fiecare cuplu de gazde (de ex. Setarea portului pentru conectarea laremote2
peremote1
), dar, desigur, s-ar putea să vă simțiți inconfortabil, în funcție de numărul de gazde pe care îl aveți.