J'essaie de scp un fichier d'un serveur distant à ma machine locale. Seul le port 80 est accessible.
J'ai essayé:
scp -p 80 [email protected]:/root/file.txt .
mais j'ai eu cette erreur: cp: 80: No such file or directory
Comment spécifier le numéro de port dans une commande scp?
Contrairement à ssh, scp utilise le commutateur P majuscule pour définir le port à la place du p minuscule:
scp -P 80 ... # Use port 80 to bypass the firewall, instead of the scp default
Le commutateur p minuscule est utilisé avec scp pour la conservation des temps et des modes.
Voici un extrait de la page de manuel de scp contenant tous les détails concernant les deux commutateurs, ainsi qu'une explication de la raison pour laquelle la majuscule P a été choisie 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é à la préservation des temps et des modes du fichier dans rcp (1).
-p Conserve les heures de modification, les temps d'accès et les modes du fichier d'origine.
Mise à jour et mise à part pour répondre à l'un des commentaires (très votés) :
En ce qui concerne le commentaire d'Abdull à propos de l'ordre scp
, il suggère ce qui suit:
scp -P80 -r some_directory -P 80 ...
..., sépare les options et les paramètres. getopt(1)
définit clairement que les paramètres doivent figurer après les options et ne pas en être entremêlés:
Les paramètres de getopt sont appelés avec 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 SYNOPSIS) et les paramètres à analyser (paramètres dans SYNOPSIS). La deuxième partie commencera à le premier paramètre de non-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.
Puisque l'option de ligne de commande -r
ne prend aucun autre argument, some_directory
est "le premier paramètre non-option qui n'est pas un argument d'option". Par conséquent, comme indiqué clairement dans la page de manuel getopt(1)
, tous les arguments de ligne de commande qui le suivent (c.-à-d. -P 80 ...
) sont considérés comme des options sans option (et des arguments sans option).
Donc, en pratique, voici comment getopt(1)
voit l'exemple présenté avec la fin des options et le début des paramètres délimités par le remplacement du texte en gris:
scp -P80 -r some_directory -P 80 ...
Cela n'a rien à voir avec le comportement scp
et avec la manière dont les applications standard POSIX analysent les options de ligne de commande à l'aide de l'ensemble getopt(3)
de fonctions C.
Pour plus de détails sur la commande et le traitement en ligne de commande, veuillez lire la page de manuel getopt(1)
en utilisant:
man 1 getopt
Un indice supplémentaire. Placez l'option '-P' après la commande scp, que la machine sur laquelle vous êtes ssh-ing ou non soit la seconde (ou destination). Exemple:
scp -P 2222 /absolute_path/source-folder/some-file [email protected]:/absolute_path/destination-folder
Vous savez ce qui est plus cool que -P
? rien
Si vous utilisez ce serveur plus de quelques fois, configurez/créez un fichier ~/.ssh/config
avec une entrée telle que:
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 & more
Il existe de nombreuses options de configuration que vous pouvez utiliser dans les fichiers de configuration, voir:
man ssh_config
J'utilise différents ports, puis standard et copie les fichiers entre eux, comme ceci:
scp -P 1234 user@[ip address or Host name]:/var/www/mywebsite/dumps/* /var/www/myNewPathOnCurrentLocalMachine
Ceci est seulement pour une utilisation occasionnelle, s'il se répète selon un calendrier, vous devez utiliser rsync et cron job pour le faire.
l’aide de scp nous indique que le port est spécifié par 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.
Copie du fichier sur l'hôte: scp SourceFile remoteuser@remotehost:/directory/TargetFile
Copie du fichier à partir de l'hôte: scp user@Host:/directory/SourceFile TargetFile
Copier le répertoire récursivement à partir de l'hôte: scp -r user@Host:/directory/SourceFolder TargetFolder
NOTE: 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
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
toi ALi
Ceci peut être réalisé en spécifiant le port via le commutateur -P
:
scp -i ~/keys/yourkey -P2222 file ubuntu@Host:/directory/
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