Wie gebe ich den Port für scp für einen Remote-Server an?

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 einfache scp ausgeben oder dies in einer Zeile mit etwas wie tun ssh -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 zu remote2 unter remote1), 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-n -x -oClearAllForwardings=yes hinzufügen / div>, obwohl dies normalerweise nicht benötigt wird.


[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 mit rsync 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)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.