Ik heb twee externe knooppunten die ik probeer bestanden van de ene naar de andere te verzenden.
scp remote1:~/testSCP [email protected]:~/
Ik heb ~/ssh/config
ingesteld op mijn lokale computer, dus het gebruikt standaard poort 2222
.
Maar de standaard ssh-poort van remote1 is ingesteld op 22
in de ssh-configuratie in plaats van poort 2222
. Dus, om een externe verbinding via ssh, het gebruikt standaard poort 22
.
Ik heb het volgende geprobeerd, maar dat werkte niet:
scp -P 2222 remote1:~/testSCP [email protected]:~/
Ik heb ook het volgende geprobeerd, dat ook niet werkte:
scp remote1:~/testSCP -P 2222 [email protected]:~/
Voor beide kreeg ik de volgende foutmelding:
ssh: connect to host 10.0.1.10 port 22: Connection refused lost connection
Wat waar is aangezien 10.0.1.10
poort 2222
gebruikt en niet poort 22
.
Hoe kan ik specificeren dat remote1 poort 2222
gebruikt wanneer ik bestanden probeer te verzenden naar (remote2) van remote1
?
Update
Na het proberen
scp -3 remote1:~/testSCP [email protected]:~/
Ik krijg raar gedrag. Hoewel mijn wachtwoord correct is, geeft het me de volgende 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:
Ik heb nog geen sleutelloze authenticatie ingeschakeld.
Nieuwe update
Nadat ik het op verschillende manieren had geprobeerd, kon ik het in mijn scripts doen door in te loggen op de remote1 via ssh vanaf mijn localhost en vervolgens scp van remote1 naar remote2. Dit geeft echter geen antwoord op mijn vraag. Ik was van plan het rechtstreeks vanaf mijn lokale computer te doen en vervolgens bestanden over te dragen tussen twee instanties, wat volgens mij niet wordt ondersteund als twee instanties “ssh-daemons een andere poort gebruiken dan de standaardpoort voor de ssh-verbinding.
Opmerkingen
Antwoord
Je kunt dat niet doen met een simpele remote-to-remote scp [1].
In plaats daarvan ssh naar de eerste externe host en voer scp uit met een poortargument van daaruit:
ssh -p 2222 ruser1@rhost1 scp -P 2222 /rpath/1 ruser2@rhost2:/rpath/2
Als je precies wilt doen wat scp
doet, kun je ook de -n -x -oClearAllForwardings=yes
-opties toevoegen aan ssh
, hoewel dat meestal niet nodig is.
[1]: nieuwere versies van scp
ondersteunen een uri-specificatie (inclusief een poort) in plaats van host:path
, maar alleen bij gebruik van de -3
optie (“pass through the local host”).
U kunt dus waarschijnlijk
scp -3 -P 2222 ruser1@rhost1:/rpath/1 scp://ruser2@rhost2:2222//rpath/2
gebruiken (merk op dat de /
na de host[:port]
maakt geen deel uit van het pad – verwijst naar ./file
in de user
” s homedirectory).
Maar kopiëren via de localhost is beide langzamer en naar mijn ervaring zal het fouten verbergen. Hiermee wordt bijvoorbeeld “geen foutmelding afgedrukt, ook al kan er geen /foo/bar/baz
-bestand worden gemaakt:
scp -3 localhost:.bashrc localhost:/foo/bar/baz
Ik ben hier niet diep op ingegaan – heb het gewoon vermeden 😉
Als iemand hier niet van overtuigd is, kunnen ze kijken naar de broncode :
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"); }
Merk op dat de tport
variabele alleen is ingesteld door een scp://
uri te parseren, en het bestaat gewoon niet in versies ouder dan 7.6p1 (oktober 2017).
Reacties
- Kunt u alstublieft uitleggen wat
-x -oClearAllForwardings=yes
deze optie doet in uw antwoord? Ik dacht ook na of het kan worden gedaan door in plaats daarvanrsync
te gebruiken. -
-x
schakelt X11-doorsturen uit en-oClear..
schakelt alle tcp-forwardings uit (in het geval dat een van deze werd afgedwongen via~/.ssh/config
of/etc/ssh/ssh_config
) - @RakibFiha rsync zegt: " De bron en het doel kunnen niet beide op afstand zijn ". Misschien zijn er trucjes omheen, maar dat zou een aparte vraag moeten zijn.
- Nu moet ik het me realiseren na je gedetailleerde uitleg. (y)
~/.ssh/config
In remote 1 en remote is de standaardpoort in ~ / .ssh / config ongewijzigd, dus de standaardpoort 22. Ik kan ze bewerken, maar ik zou het graag doen met een one-liner, in plaats van elke ssh-configuratie elke keer opnieuw te bewerken.ssh
naar de externe hosts sturen en van daaruit een eenvoudigescp
geven, of het op één regel doen met zoiets alsssh -t -p <remote1 port> user1@remote1 'scp -P <remote2 port> user2@remote2:/source/path /dest/path'
. Bovendien hoef je ' nietconfig
bestanden op elk moment te bewerken: slechts één keer voor elk paar hosts (bijv. De poort instellen voor verbinding maken metremote2
opremote1
), maar je kunt je hier natuurlijk ongemakkelijk bij voelen, afhankelijk van het aantal hosts dat je hebt.