scp con el número de puerto especificado

794

Estoy tratando de scp un archivo de un servidor remoto a mi máquina local. Solo el puerto 80 es accesible.

Lo intenté:

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

pero tengo este error: cp: 80: No such file or directory

¿Cómo especifico el número de puerto en un comando scp?

Uno dos tres
fuente
33
puerto debe estar en la capital -P 80
Eliethesaiyan

Respuestas:

1407

A diferencia de ssh, scp usa el interruptor P mayúscula para configurar el puerto en lugar de la p minúscula:

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

El interruptor p minúscula se usa con scp para la preservación de tiempos y modos.

Aquí hay un extracto de la página de manual de scp con todos los detalles relacionados con los dos interruptores, así como una explicación de por qué se eligió P mayúscula para scp:

-P puerto Especifica el puerto para conectarse en el host remoto. Tenga en cuenta que esta opción está escrita con una 'P' mayúscula, ya que -p ya está reservado para preservar los tiempos y modos del archivo en rcp (1).

-p Conserva los tiempos de modificación, los tiempos de acceso y los modos del archivo original.

Actualice y aparte para abordar uno de los comentarios (muy votados) :

Con respecto al comentario de Abdull sobre el scporden de opciones, lo que sugiere:

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

..., intercala opciones y parámetros. getopt(1)define claramente que los parámetros deben venir después de las opciones y no estar intercalados con ellas:

Los parámetros con los que se llama getopt se pueden dividir en dos partes: opciones que modifican la forma en que getopt realizará el análisis (las opciones y la cadena de operación en la SINOPSIS), y los parámetros que se analizarán (parámetros en la SINOPSIS). La segunda parte comenzará en el primer parámetro sin opción que no es un argumento de opción, o después de la primera aparición de '-'. Si no se encuentra la opción '-o' o '--options' en la primera parte, el primer parámetro de la segunda parte se usa como la cadena de opciones cortas.

Dado que la -ropción de línea de comando no toma más argumentos, some_directoryes "el primer parámetro sin opción que no es un argumento de opción". Por lo tanto, como se explica claramente en la getopt(1)página del manual, -P 80 ...se supone que todos los argumentos de la línea de comandos que siguen (es decir, ) no son opciones (y no son opciones).

Entonces, en efecto, así es como se getopt(1)ve el ejemplo presentado con el final de las opciones y el comienzo de los parámetros delimitados por el texto siguiente bing en gris:

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

Esto no tiene nada que ver con el scpcomportamiento y todo con la forma en que las aplicaciones estándar POSIX analizan las opciones de la línea de comandos utilizando el getopt(3)conjunto de funciones de C.

Para obtener más detalles sobre el pedido y el procesamiento de la línea de comandos, lea la página de getopt(1)manual usando:

man 1 getopt
Michael Goldshteyn
fuente
88
por cierto, scpexige el orden correcto de opciones: scp -r some_directory -P 80 ...no funciona ----- pero scp -P 80 -r some_directory ...funciona.
Abdull
99
generalmente en Linux, el comando es seguido por las opciones y luego las instrucciones / valores
Gary
2
@Abdull tenga en cuenta que scp -r -p 50193 / path / to / directory también funciona. El parámetro de ruta del archivo no está vinculado a la opción -r recursividad.
Benjamin
66
@Benjamin A menos que quisieras usar el puerto 50193, en cuyo caso tu 'p' debería estar en mayúscula.
Ninguno
1
@Abdull: hay una respuesta en askubuntu.com/a/307078/37574 que explica el -Porden de los parámetros. Básicamente, el puerto tiene que ir antes que el host. Esto evita la ambigüedad y permite dos -Pparámetros si ambos hosts son remotos.
mwfearnley
70

Una pista adicional. Coloque la opción '-P' después del comando scp, sin importar si la máquina en la que está ingresando es la segunda (también conocida como destino). Ejemplo:

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

¿Sabes qué es más genial que -P? nada

Si usa este servidor más de unas pocas veces, configure / cree un ~/.ssh/configarchivo con una entrada como:

Host www.myserver.com
    Port 80

o

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

Entonces puedes usar:

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

o

scp short:/root/file.txt .

Puede usar cualquier cosa en la línea "Host" con ssh, scp, rsync, git y más

Hay MUCHAS opciones de configuración que puede usar en los archivos de configuración, consulte:

man ssh_config

Miguel
fuente
3
Única solución que permite el uso scp -3desde y hacia servidores con escuchas ssh en diferentes puertos. scp -3 -P 123 server1:/file -P 456 server2:/fileo alternativas similares no funcionarían, scp asumió el mismo puerto en ambos servidores
usuario88595
28

Estoy usando diferentes puertos, luego estándar y copio archivos entre archivos como este:

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

Esto es solo para uso ocasional, si se repite en base a una programación, debe usar rsync y cron para hacerlo.

Marian Zburlea
fuente
7

para usar otro puerto en el comando scp use P mayúscula

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

ya ali

Hasan Barary
fuente
6

la ayuda de scp nos dice que el puerto se especifica con mayúscula

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

Espero que esto ayude.

DD
fuente
2

Copiando archivo al host: scp SourceFile remoteuser@remotehost:/directory/TargetFile

Copiando archivo del host: scp user@host:/directory/SourceFile TargetFile

Copiando directorio recursivamente desde el host: scp -r user@host:/directory/SourceFolder TargetFolder

NOTA : Si el host está usando un puerto diferente al puerto 22, puede especificarlo con la opción -P: scp -P 2222 user@host:/directory/SourceFile TargetFile

AJ
fuente
66
Solo la NOTA sería suficiente
blagus
2

Esto se puede lograr especificando el puerto a través del -Pconmutador:

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

si necesita copiar el archivo local al servidor (especifique el puerto)

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

Espero que esto ayude a alguien que busca una respuesta perfecta

Copiar una carpeta o archivo de un servidor con un puerto definido a otro servidor o máquina local

  1. Vaya a un directorio donde tenga derechos de administrador, preferiblemente su directorio de inicio en la máquina donde desea copiar archivos
  2. Escribe el comando a continuación

scp -r -P usuario de puerto @ dirección_IP: / home / file / pathDirectory.

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

Hay muchas respuestas, pero deberías poder mantenerlo simple. Asegúrese de saber en qué puerto está escuchando SSH y defínalo. Esto es lo que acabo de usar para replicar su problema.

scp -P 12222 file.7z [email protected]: / home / user / Downloads Funcionó bien.

HarteScout 1
fuente