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


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

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

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


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.


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


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.


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


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/

2

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

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

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

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 user@193.168.XX: / home / user / Downloads Funcionó bien.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.