Ich habe zwei Remote-Knoten, die ich versuche, Dateien von einem zum anderen zu senden.
scp remote1:~/testSCP [email protected]:~/
Ich habe ~/ssh/config
auf meinem lokalen Computer eingerichtet, daher wird standardmäßig Port 2222
verwendet.
Der Standard-SSH-Port von remote1 ist jedoch in der SSH-Konfiguration auf 22
anstelle von Port 2222
festgelegt Bei einer externen Verbindung über ssh wird standardmäßig Port 22
verwendet.
Ich habe Folgendes versucht, was nicht funktioniert hat:
scp -P 2222 remote1:~/testSCP [email protected]:~/
Es wurde auch Folgendes versucht, was ebenfalls nicht funktionierte:
scp remote1:~/testSCP -P 2222 [email protected]:~/
Für beide wurde der folgende Fehler angezeigt:
ssh: connect to host 10.0.1.10 port 22: Connection refused lost connection
Dies ist der Fall, da 10.0.1.10
Port 2222
und nicht Port 22
.
Wie kann ich remote1 angeben, um Port 2222
zu verwenden, wenn versucht wird, Dateien an (remote2) von remote1
?
Update
Nach dem Versuch
scp -3 remote1:~/testSCP [email protected]:~/
Ich bekomme komisches Verhalten. Obwohl mein Passwort korrekt ist, gibt es mir die folgende Ausgabe:
[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:
Ich habe die Authentifizierung ohne Schlüssel noch nicht aktiviert.
Neues Update
Nachdem ich es auf verschiedene Arten ausprobiert hatte, konnte ich es in meinen Skripten tun, indem ich mich über ssh von meinem lokalen Host bei remote1 anmeldete und dann von remote1 zu remote2 scp. Dies beantwortet jedoch nicht meine Frage. Ich wollte dies direkt von meinem lokalen Computer aus tun und dann Dateien zwischen zwei Instanzen übertragen. Dies wird meiner Meinung nach nicht unterstützt, wenn zwei Instanzen „ssh-Daemons“ einen anderen Port als den Standard für die ssh-Verbindung verwenden.
Kommentare
- stackoverflow.com/questions/10341032/… könnte Ihnen helfen
- Ich habe diese ausprobiert, wie ich in meiner Frage erwähnt habe. Schien bei mir nicht zu funktionieren
- localhost hat Port 22 abgehört, aber in der ssh-Konfiguration ist es für remote1 bis remote2 spezifiziert zu Port 2222. Ja, ich meinte
~/.ssh/config
In Remote 1 und Remote ist der Standardport in ~ / .ssh / config unverändert, sodass sein Standardport 22. Ich kann sie bearbeiten, aber ich Ich würde es gerne mit einem Einzeiler tun, anstatt jede SSH-Konfiguration jedes Mal zu bearbeiten. - Ok. Ich ' würde vorschlagen, Ihre Frage zu bearbeiten. Fügen Sie hinzu, dass Sie dies können, aber ' nicht bereit sind, Ihre Dateien. Dann können Sie
ssh
in eine an die Remote-Hosts senden und von dort aus eine einfachescp
ausgeben oder dies in einer Zeile mit etwas wie tunssh -t -p <remote1 port> user1@remote1 'scp -P <remote2 port> user2@remote2:/source/path /dest/path'
. Außerdem müssen Sie 'config
-Dateien nicht jedes Mal bearbeiten: nur einmal für jedes Hostpaar (z. B. Festlegen des Ports für Herstellen einer Verbindung zuremote2
unterremote1
), aber je nach Anzahl der Hosts kann dies natürlich unangenehm sein. - Ja, das beantwortet Ihre Frage. " Nein " ist eine Antwort und die Antwort, egal ob Sie mögen es oder nicht.
Antwort
Mit einem einfachen Remote-zu-Remote-SCP ist dies nicht möglich [1].
Ssh stattdessen zum 1. Remote-Host und führe scp mit einem Port-Argument von dort aus aus:
ssh -p 2222 ruser1@rhost1 scp -P 2222 /rpath/1 ruser2@rhost2:/rpath/2
Wenn Sie genau das tun möchten, was scp
tut, können Sie ssh
[1]: Neuere Versionen von scp
unterstützen eine URL-Spezifikation (einschließlich eines Ports). anstelle von host:path
, jedoch nur bei Verwendung der Option -3
(„Durchlaufen des lokalen Hosts“).
Sie könnten also wahrscheinlich
scp -3 -P 2222 ruser1@rhost1:/rpath/1 scp://ruser2@rhost2:2222//rpath/2
verwenden (beachten Sie, dass die /
nach der host[:port]
ist nicht Teil des Pfads – verweist auf ./file
im Home-Verzeichnis von user
.
Aber Das Kopieren über den localhost ist langsamer und meiner Erfahrung nach werden Fehler ausgeblendet. Dies gibt beispielsweise keine Fehlermeldung aus, obwohl keine /foo/bar/baz
-Datei erstellt werden kann:
scp -3 localhost:.bashrc localhost:/foo/bar/baz
Ich bin nicht näher darauf eingegangen – habe es einfach vermieden 😉
Wenn jemand von all dem nicht überzeugt ist, kann er sich die Quellcode :
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"); }
Beachten Sie, dass die Variable tport
nur festgelegt ist durch Parsen eines scp://
uri, der in Versionen älter als 7.6p1 (Oktober 2017) einfach nicht vorhanden ist.
Kommentare
- Können Sie bitte erklären, was
-x -oClearAllForwardings=yes
diese Option in Ihrer Antwort bewirkt? Ich habe auch darüber nachgedacht, ob dies stattdessen mitrsync
möglich ist. -
-x
deaktiviert die X11-Weiterleitung und-oClear..
deaktiviert alle TCP-Weiterleitungen (falls eine von ihnen über~/.ssh/config
oder/etc/ssh/ssh_config
) - @RakibFiha rsync sagt: " Die Quelle und das Ziel können nicht beide entfernt sein ". Vielleicht gibt es Tricks, aber das sollte eine separate Frage sein.
- Jetzt muss ich es nach Ihrer ausführlichen Erklärung erkennen. (y)