scp mit angegebener Portnummer


794

Ich versuche, eine Datei von einem Remote-Server auf meinen lokalen Computer zu übertragen. Nur Port 80 ist zugänglich.

Ich habe es versucht:

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

habe aber diesen Fehler bekommen: cp: 80: No such file or directory

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


33
Hafen sollte in der Hauptstadt -P 80
Eliethesaiyan

Antworten:


1407

Im Gegensatz zu ssh verwendet scp den P-Schalter in Großbuchstaben, um den Port anstelle des p in Kleinbuchstaben festzulegen:

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

Der p-Schalter in Kleinbuchstaben wird mit scp verwendet, um Zeiten und Modi beizubehalten.

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

-P port Gibt den Port an, zu dem eine Verbindung auf dem Remote-Host hergestellt werden soll. Beachten Sie, dass diese Option mit einem Großbuchstaben 'P' geschrieben wird, da -p bereits für die Beibehaltung der Zeiten und Modi der Datei in rcp (1) reserviert ist.

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

Aktualisieren und beiseite, um einen der (stark positiv bewerteten) Kommentare anzusprechen :

In Bezug auf Abdulls Kommentar zur scpOptionsreihenfolge schlägt er vor:

scp -P80 -r some_directory -P 80 ...

..., setzt Optionen und Parameter ein. getopt(1)definiert klar, dass Parameter nach Optionen kommen und nicht mit ihnen durchsetzt werden dürfen:

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

Da die -rBefehlszeilenoption keine weiteren Argumente akzeptiert, some_directoryist sie "der erste Nichtoptionsparameter, der kein Optionsargument ist". Wie in der getopt(1)Manpage klar dargelegt , werden daher alle nachfolgenden Befehlszeilenargumente, die darauf folgen (dh -P 80 ...), als Nichtoptionen (und Nichtoptionsargumente) angenommen.

Auf diese Weise wird getopt(1)das Beispiel mit dem Ende der Optionen und dem Anfang der Parameter dargestellt, die durch den nachfolgenden Text in Grau abgegrenzt werden:

scp -P80 -r some_directory -P 80 ...

Dies hat nichts mit dem scpVerhalten zu tun und alles damit, wie POSIX-Standardanwendungen Befehlszeilenoptionen mithilfe der getopt(3)C-Funktionen analysieren .

Weitere Informationen zur Bestellung und Verarbeitung von Befehlszeilen finden Sie in der getopt(1)Manpage unter:

man 1 getopt

88
Übrigens, scpverlangt die richtige Reihenfolge der Optionen: scp -r some_directory -P 80 ...funktioniert nicht ----- aber scp -P 80 -r some_directory ...funktioniert.
Abdull

9
In der Regel unter Linux folgen dem Befehl die Optionen und dann die Anweisungen / Werte
Gary

2
@Abdull Beachten Sie, dass das Verzeichnis scp -r -p 50193 / path / to / ebenfalls funktioniert. Der Dateipfadparameter ist nicht an die Rekursionsoption -r gebunden.
Benjamin

6
@Benjamin Es sei denn, Sie wollten Port 50193 verwenden. In diesem Fall sollte Ihr 'p' groß geschrieben werden.
Keine

1
@Abdull: es gibt eine Antwort auf askubuntu.com/a/307078/37574 , die die erklärt -PParameter Ordnung. Grundsätzlich muss der Port vor dem Host gehen. Dies verhindert Mehrdeutigkeiten und ermöglicht zwei -PParameter, wenn beide Hosts remote sind.
mwfearnley

70

Ein zusätzlicher Hinweis. Platzieren Sie die Option '-P' nach dem Befehl scp, unabhängig davon, ob es sich bei dem Computer, auf dem Sie sich befinden, um den zweiten handelt (auch als Ziel bezeichnet). Beispiel:

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

46

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

Wenn Sie diesen Server mehrmals verwenden, richten Sie eine ~/.ssh/configDatei mit einem Eintrag wie dem folgenden ein:

Host www.myserver.com
    Port 80

oder

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 .

oder

scp short:/root/file.txt .

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

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

man ssh_config


3
Einzige Lösung, die die Verwendung scp -3von und zu Servern mit SSH-Listenern an verschiedenen Ports ermöglicht. scp -3 -P 123 server1:/file -P 456 server2:/fileoder ähnliche Alternativen würden nicht funktionieren, scp nahm den gleichen Port auf beiden Servern an
user88595

28

Ich verwende andere Ports als Standard und kopiere Dateien zwischen Dateien wie folgt:

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

Dies ist nur für den gelegentlichen Gebrauch vorgesehen. Wenn es sich basierend auf einem Zeitplan wiederholt, sollten Sie dazu rsync und cron job verwenden.


7

Um einen anderen Port für den Befehl scp zu verwenden, verwenden Sie das Großbuchstaben P wie folgt

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

ya ali


6

Die scp-Hilfe teilt uns mit, dass der Port in Großbuchstaben P angegeben ist.

~$ scp
usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 ... [[user@]host2:]file2

Hoffe das hilft.


2

Kopieren der Datei auf den Host: scp SourceFile remoteuser@remotehost:/directory/TargetFile

Kopieren der Datei vom Host: scp user@host:/directory/SourceFile TargetFile

Rekursives Kopieren des Verzeichnisses vom Host: scp -r user@host:/directory/SourceFolder TargetFolder

HINWEIS : Wenn der Host einen anderen Port als Port 22 verwendet, können Sie ihn mit der Option -P angeben: scp -P 2222 user@host:/directory/SourceFile TargetFile


6
Nur die ANMERKUNG wäre genug
Blagus

2

Dies kann erreicht werden, indem der Port über den -PSwitch angegeben wird:

scp -i ~/keys/yourkey -P2222 file ubuntu@host:/directory/

2

Wenn Sie eine lokale Datei auf den Server kopieren müssen (Port angeben)

scp -P 3838 /the/source/file username@server.com:/destination/file

0

Hoffe, dies wird jemandem helfen, der nach einer perfekten Antwort sucht

Kopieren eines Ordners oder einer Datei von einem Server mit einem definierten Port auf einen anderen Server oder lokalen Computer

  1. Wechseln Sie in ein Verzeichnis, in dem Sie Administratorrechte haben, vorzugsweise in Ihr Home-Verzeichnis auf dem Computer, in den Sie Dateien kopieren möchten
  2. Schreiben Sie den folgenden Befehl

scp -r -P Portbenutzer @ IP-Adresse: / home / file / pathDirectory.

**Note:** The last . on the command directs it to copy everything in that folder to your directory of preference

0

Es gibt viele Antworten, aber Sie sollten es einfach halten können. Stellen Sie sicher , dass Sie wissen, welcher Port SSH abhört, und definieren Sie ihn. Hier ist, was ich gerade verwendet habe, um Ihr Problem zu replizieren.

scp -P 12222 file.7z user@193.168.XX: / home / user / Downloads Es hat gut geklappt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.