scp avec le numéro de port spécifié

795

J'essaie de scp un fichier d'un serveur distant vers ma machine locale. Seul le port 80 est accessible.

J'ai essayé:

scp -p 80 [email protected]:/root/file.txt .

mais a obtenu cette erreur: cp: 80: No such file or directory

Comment spécifier le numéro de port dans une commande scp?

Un deux trois
la source
33
le port devrait être en capitale -P 80
Eliethesaiyan

Réponses:

1408

Contrairement à ssh, scp utilise le commutateur P majuscule pour définir le port au lieu du p minuscule:

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

Le commutateur p en minuscules est utilisé avec scp pour la conservation des temps et des modes.

Voici un extrait de la page de manuel de scp avec tous les détails concernant les deux commutateurs, ainsi qu'une explication de la raison pour laquelle le P majuscule a été choisi pour scp:

-P port Spécifie le port auquel se connecter sur l'hôte distant. Notez que cette option est écrite avec un «P» majuscule, car -p est déjà réservé pour conserver les heures et les modes du fichier dans rcp (1).

-p Préserve les temps de modification, les temps d'accès et les modes du fichier d'origine.

Mettez à jour et mettez de côté pour répondre à l'un des commentaires (fortement votés) :

En ce qui concerne le commentaire d'Abdull sur l' scpordre d'option, ce qu'il suggère:

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

..., intercalent les options et les paramètres. getopt(1)définit clairement que les paramètres doivent venir après les options et ne pas être entrecoupés avec elles:

Les paramètres avec lesquels getopt est appelé peuvent être divisés en deux parties: les options qui modifient la façon dont getopt effectuera l'analyse (les options et l'optstring dans le SYNOPSIS), et les paramètres qui doivent être analysés (les paramètres dans le SYNOPSIS). La deuxième partie commencera au premier paramètre sans option qui n'est pas un argument d'option, ou après la première occurrence de '-'. Si aucune option '-o' ou '--options' n'est trouvée dans la première partie, le premier paramètre de la deuxième partie est utilisé comme chaîne d'options courte.

Étant donné que l' -roption de ligne de commande ne prend aucun autre argument, some_directoryest "le premier paramètre sans option qui n'est pas un argument d'option". Par conséquent, comme clairement indiqué dans la getopt(1)page de manuel, tous les arguments de ligne de commande suivants qui le suivent (c'est-à-dire -P 80 ...) sont supposés être des non-options (et des arguments non-option).

Ainsi, en effet, voici comment getopt(1)l'exemple présenté avec la fin des options et le début des paramètres est délimité par le texte suivant bing en gris:

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

Cela n'a rien à voir avec le scpcomportement et tout à voir avec la façon dont les applications standard POSIX analysent les options de ligne de commande à l'aide de l' getopt(3)ensemble des fonctions C.

Pour plus de détails concernant la commande et le traitement en ligne de commande, veuillez lire la getopt(1)page de manuel en utilisant:

man 1 getopt
Michael Goldshteyn
la source
88
btw, scpdemande l'ordre des options correct: scp -r some_directory -P 80 ...ne fonctionne pas ----- mais scp -P 80 -r some_directory ...fonctionne.
Abdull
9
généralement sous linux la commande est suivie des options puis des instructions / valeurs
Gary
2
@Abdull note que scp -r -p 50193 / chemin / vers / répertoire fonctionne également. Le paramètre de chemin d'accès au fichier n'est pas lié à l'option de récurrence -r.
Benjamin
6
@Benjamin A moins que vous ne vouliez utiliser le port 50193, auquel cas votre "p" doit être mis en majuscule.
Aucun
1
@Abdull: il y a une réponse sur askubuntu.com/a/307078/37574 qui explique l' -Pordre des paramètres. Fondamentalement, le port doit passer avant l'hôte. Cela empêche à la fois l'ambiguïté et permet deux -Pparamètres si les deux hôtes sont distants.
mwfearnley
70

Un indice supplémentaire. Placez l'option '-P' après la commande scp, que la machine dans laquelle vous vous connectez soit la deuxième (alias destination). Exemple:

scp -P 2222 /absolute_path/source-folder/some-file [email protected]:/absolute_path/destination-folder
Gooshan
la source
46

Tu sais ce qui est plus cool que -P? rien

Si vous utilisez ce serveur plusieurs fois, configurez / créez un ~/.ssh/configfichier avec une entrée comme:

Host www.myserver.com
    Port 80

ou

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

Ensuite, vous pouvez utiliser:

scp [email protected]:/root/file.txt .

ou

scp short:/root/file.txt .

Vous pouvez utiliser n'importe quoi sur la ligne "Host" avec ssh, scp, rsync, git et plus

Il existe de nombreuses options de configuration que vous pouvez utiliser dans les fichiers de configuration, voir:

man ssh_config

Mike
la source
3
Seule solution qui permet l'utilisation de scp -3et vers des serveurs avec des écouteurs ssh sur différents ports. scp -3 -P 123 server1:/file -P 456 server2:/fileou des alternatives similaires ne fonctionneraient pas, scp a supposé le même port sur les deux serveurs
user88595
28

J'utilise différents ports, puis standard et copie des fichiers entre des fichiers comme celui-ci:

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

Ce n'est que pour une utilisation occasionnelle, s'il se répète en fonction d'un calendrier, vous devez utiliser rsync et cron pour le faire.

Marian Zburlea
la source
7

pour utiliser un autre port sur la commande scp utiliser le capital P comme celui-ci

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

Ya Ali

Hasan Barary
la source
6

l'aide de scp nous indique que le port est spécifié par un P. majuscule

~$ 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

J'espère que cela t'aides.

DD
la source
2

Copie du fichier sur l'hôte: scp SourceFile remoteuser@remotehost:/directory/TargetFile

Copie du fichier depuis l'hôte: scp user@host:/directory/SourceFile TargetFile

Copie récursive du répertoire à partir de l'hôte: scp -r user@host:/directory/SourceFolder TargetFolder

REMARQUE : si l'hôte utilise un port autre que le port 22, vous pouvez le spécifier avec l'option -P: scp -P 2222 user@host:/directory/SourceFile TargetFile

UN J.
la source
6
Juste la NOTE serait suffisante
blagus
2

Cela peut être obtenu en spécifiant le port via le -Pcommutateur:

scp -i ~/keys/yourkey -P2222 file ubuntu@host:/directory/
Vaseem007
la source
2

si vous avez besoin de copier le fichier local sur le serveur (spécifiez le port)

scp -P 3838 /the/source/file [email protected]:/destination/file
Turan Zamanlı
la source
0

J'espère que cela aidera quelqu'un à la recherche d'une réponse parfaite

Copie d'un dossier ou d'un fichier à partir d'un serveur avec un port défini sur un autre serveur ou une machine locale

  1. Accédez à un répertoire dans lequel vous disposez des droits d'administrateur, de préférence votre répertoire personnel sur la machine sur laquelle vous souhaitez copier les fichiers.
  2. Écrivez la commande ci-dessous

scp -r -P port user @ IP_address: / home / file / pathDirectory.

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

Il existe de nombreuses réponses, mais vous devriez simplement être simple. Assurez-vous de savoir sur quel port SSH écoute et définissez-le. Voici ce que je viens d'utiliser pour reproduire votre problème.

scp -P 12222 file.7z [email protected]: / home / user / Downloads Cela a bien fonctionné.

HarteScout 1
la source