1119 Stimmen

scp mit angegebener Portnummer

Ich versuche, eine Datei von einem entfernten Server auf meinen lokalen Rechner zu scpen. Nur Port 80 ist zugänglich.

Ich habe es versucht:

scp -p 80 username@www.myserver.com:/root/file.txt .

erhielt aber diesen Fehler: cp: 80: No such file or directory

Wie gebe ich die Portnummer in einem scp-Befehl an?

75 Stimmen

Port sollte in Großbuchstaben sein -P 80

1931voto

Michael Goldshteyn Punkte 68533

Im Gegensatz zu ssh wird bei scp der Port mit dem Großbuchstaben P statt mit dem Kleinbuchstaben p angegeben:

scp -P 80 ... # Use port 80 to bypass the firewall, instead of the scp default

Der Kleinbuchstaben-Schalter p wird bei scp für die Speicherung von Zeiten und Modi verwendet.

Hier ist ein Auszug aus der Manpage von scp mit allen Details zu den beiden Schaltern sowie eine Erklärung, warum für scp der Großbuchstabe P gewählt wurde:

-P port Gibt den Port an, mit dem eine Verbindung auf dem entfernten Host hergestellt werden soll. Beachten Sie, dass diese Option mit einem großen 'P' geschrieben wird, da -p bereits reserviert ist, um die Zeiten und Modi der Datei in rcp(1) zu erhalten.

-p Behält Änderungszeiten, Zugriffszeiten und Modi der Originaldatei bei.

Bonus-Tipp : Wie kann ich den Port ermitteln, der von dem/einem SSH-Daemon verwendet wird, um SSH-Verbindungen zu akzeptieren?

Diese Frage lässt sich mit Hilfe der netstat Nutzen wie folgt:

sudo netstat -tnlp | grep sshd

Oder Sie verwenden die weitaus besser lesbaren wortbasierten netstat-Optionsnamen:

sudo netstat --tcp --numeric-ports --listening --program | grep sshd

Wenn Ihr ssh-Daemon mit den Standardwerten für die zu überwachenden Ports konfiguriert ist, erhalten Sie die folgende Ausgabe (wobei die Leerzeichen zwischen den Spalten ein wenig gekürzt wurden, damit die gesamte Tabelle ohne Scrollen sichtbar ist):

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address  Foreign Address  State       ID/Program name
tcp      0      0   0.0.0.0:22     0.0.0.0:*        LISTEN      888/sshd: /usr/sbin 
tcp6     0      0   :::22          :::*             LISTEN      888/sshd: /usr/sbin 

Wichtiger Hinweis

Für die oben genannten Beispiele, sudo wurde verwendet, um netstat mit Administratorrechten auszuführen, um zu sehen alle der Programm-Namen . Wenn Sie netstat als normaler Benutzer ausführen (d.h. ohne sudo und unter der Annahme, dass Ihnen keine Admin-Rechte gewährt wurden), werden nur die Programmnamen für Sockets angezeigt, die Ihre UID als Eigentümer haben. Die Programm-Namen für Sockets, die anderen Benutzern gehören, werden nicht angezeigt (d. h., sie werden ausgeblendet und stattdessen wird ein Platzhalter-Bindestrich angezeigt):

Proto Recv-Q Send-Q Local Address   Foreign Address  State       ID/Program name
tcp        0      0 127.0.0.1:46371 0.0.0.0:*        LISTEN      4489/code
...
tcp        0      0 0.0.0.0:111     0.0.0.0:*        LISTEN      -                   
tcp        0      0 127.0.0.53:53   0.0.0.0:*        LISTEN      -                   
tcp        0      0 0.0.0.0:22      0.0.0.0:*        LISTEN      -                   
...

Aktualisierung und Ergänzung, um auf einen der (stark hochgestimmten) Kommentare einzugehen :

In Bezug auf Abdulls Bemerkung über scp Option bestellen, was er vorschlägt:

scp -r some_directory -P 80 ...

..., streut Optionen und Parameter ein, da die -r benötigt keine zusätzlichen Argumente und some_directory wird als erster Parameter des Befehls behandelt, so dass -P und alle nachfolgenden Befehlszeilenargumente sehen wie zusätzliche Parameter für den Befehl aus (d.h. Argumente mit vorangestelltem Bindestrich werden nicht mehr als Schalter betrachtet).

getopt(1) eindeutig festgelegt, dass die Parameter nach Optionen (d. h. Schalter) und nicht wahllos mit ihnen durchsetzt sein:

Die Parameter, mit denen getopt aufgerufen wird, können in zwei Teile unterteilt werden: Optionen, die die Art und Weise ändern, wie getopt das Parsing durchführt (die Optionen und der optstring in der SYNOPSIS), und die Parameter, die geparst werden sollen (Parameter in der SYNOPSIS). Der zweite Teil beginnt bei dem ersten Nicht-Optionsparameter, der kein Optionsargument ist, oder nach dem ersten Vorkommen von '--'. Wird im ersten Teil keine Option '-o' oder '--options' gefunden, wird der erste Parameter des zweiten Teils als kurze Optionszeichenfolge verwendet.

Da die -r Befehlszeilenoption keine weiteren Argumente, some_directory ist "der erste Nicht-Optionsparameter, der kein Optionsargument ist". Daher, wie eindeutig in der getopt(1) man-Seite, alle darauf folgenden Befehlszeilenargumente (d.h., -P 80 ... ) werden als Nicht-Optionen (und Nicht-Options-Argumente) betrachtet.

Das heißt also, dass man auf diese Weise getopt(1) sehen Sie das Beispiel, bei dem das Ende der Optionen und der Anfang der Parameter durch grauen Text abgegrenzt sind:

scp -r some_directory -P 80 ...

Dies hat nichts zu tun mit scp Verhalten und alles, was damit zu tun hat, wie POSIX-Standardanwendungen Befehlszeilenoptionen unter Verwendung der getopt(3) Menge von C-Funktionen.

Weitere Einzelheiten zur Befehlszeilenbestellung und -verarbeitung finden Sie in der getopt(1) Manpage verwenden:

man 1 getopt

115voto

Gooshan Punkte 2233

Ein zusätzlicher Hinweis. Fügen Sie die Option '-P' nach dem scp-Befehl ein, unabhängig davon, ob der Rechner, in den Sie sich per ssh einwählen, der zweite ist (auch Ziel genannt). Beispiel:

scp -P 2222 /absolute_path/source-folder/some-file user@example.com:/absolute_path/destination-folder

63voto

Mike Punkte 2171

Weißt du, was noch cooler ist als -P ? nichts

Wenn Sie diesen Server mehr als nur ein paar Mal verwenden, sollten Sie eine Datenbank einrichten/erstellen. ~/.ssh/config Datei mit einem Eintrag wie:

Host www.myserver.com
    Port 80

または

Host myserver myserver80 short any.name.u.want yes_anything well-within-reason
    HostName www.myserver.com
    Port 80
    User username

Dann können Sie verwenden:

scp username@www.myserver.com:/root/file.txt .

または

scp short:/root/file.txt .

Sie können alles auf der "Host"-Zeile mit ssh, scp, rsync, git & mehr verwenden

Es gibt VIELE Konfigurationsoptionen, die Sie in Konfigurationsdateien verwenden können, siehe:

man ssh_config

41voto

Marian Zburlea Punkte 8581

Ich verwende andere Ports als die Standard-Ports und kopiere Dateien zwischen Dateien wie diese:

scp -P 1234 user@[ip address or host name]:/var/www/mywebsite/dumps/* /var/www/myNewPathOnCurrentLocalMachine

Dies ist nur für den gelegentlichen Gebrauch, wenn es sich nach einem Zeitplan wiederholt, sollten Sie rsync und cron job verwenden, um es zu tun.

18voto

Hasan Barary Punkte 782

Für die Verwendung eines anderen Ports beim scp-Befehl verwenden Sie ein großes P wie folgt

scp -P port-number source-file/directory user@domain:/destination

ya ali

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X