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 username@www.myserver.com:/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?


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

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 user@example.com:/absolute_path/destination-folder

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 username@www.myserver.com:/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


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.


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


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.


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


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/

2

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

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

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

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 user@193.168.XX: / home / user / Downloads Cela a bien fonctionné.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.