scp com o número da porta especificado

794

Estou tentando scp um arquivo de um servidor remoto para minha máquina local. Somente a porta 80 está acessível.

Eu tentei:

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

mas recebi este erro: cp: 80: No such file or directory

Como especifico o número da porta em um comando scp?

Um dois três
fonte
33
porta deve estar em -P de capital 80
Eliethesaiyan

Respostas:

1407

Diferente do ssh, o scp usa o switch P maiúsculo para definir a porta em vez do p minúsculo:

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

A opção p minúscula é usada com scp para a preservação de tempos e modos.

Aqui está um trecho da página de manual do scp com todos os detalhes relativos às duas opções, bem como uma explicação de por que P maiúsculo foi escolhido para o scp:

-P port Especifica a porta à qual se conectar no host remoto. Observe que esta opção é gravada com 'P' maiúsculo, porque -p já está reservado para preservar os horários e modos do arquivo no rcp (1).

-p Preserva os tempos de modificação, os tempos de acesso e os modos do arquivo original.

Atualize e deixe de lado para abordar um dos comentários (altamente votados) :

Com relação ao comentário de Abdull sobre a scpordem das opções, o que ele sugere:

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

..., intercala opções e parâmetros. getopt(1)define claramente que os parâmetros devem vir após as opções e não devem ser intercalados com eles:

Os parâmetros com os quais getopt é chamado podem ser divididos em duas partes: opções que modificam a maneira como getopt fará a análise (as opções e a opção de operação na SYNOPSIS) e os parâmetros a serem analisados ​​(parâmetros na SYNOPSIS). A segunda parte começará no primeiro parâmetro não opcional que não é um argumento de opção ou após a primeira ocorrência de '-'. Se nenhuma opção '-o' ou '--options' for encontrada na primeira parte, o primeiro parâmetro da segunda parte será usado como a sequência de opções curta.

Como a -ropção de linha de comando não requer mais argumentos, some_directoryé "o primeiro parâmetro que não é uma opção que não é um argumento de opção". Portanto, conforme claramente explicitado na getopt(1)página de manual, todos os argumentos de linha de comando subsequentes que se seguem (isto é, -P 80 ...) são assumidos como não opcionais (e não opcionais).

Então, com efeito, é assim que getopt(1)o exemplo é apresentado com o final das opções e o início dos parâmetros demarcados pelo texto subsequente bing em cinza:

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

Isso não tem nada a ver com scpcomportamento e tudo a ver com como os aplicativos padrão POSIX analisam as opções de linha de comando usando o getopt(3)conjunto de funções C.

Para obter mais detalhes com relação ao pedido e processamento da linha de comando, leia a página de getopt(1)manual usando:

man 1 getopt
Michael Goldshteyn
fonte
88
aliás, scpexige ordem correta das opções: scp -r some_directory -P 80 ...não funciona ----- mas scp -P 80 -r some_directory ...funciona.
Abdull
9
geralmente em linux o comando é seguido pelas opções e, em seguida, as instruções / valores
Gary
2
@ Abdull note que o diretório scp -r -p 50193 / path / to / também funciona. O parâmetro do caminho do arquivo não está vinculado à opção -r recursão.
Benjamin
6
@ Benjamin A menos que você pretenda usar a porta 50193, nesse caso, seu 'p' deve ser capitalizado.
Nenhum
1
@ Abdull: há uma resposta em askubuntu.com/a/307078/37574 que explica a -Pordem dos parâmetros. Basicamente, a porta precisa ir antes do host. Isso evita a ambiguidade e permite dois -Pparâmetros se os dois hosts forem remotos.
Mwfearnley
70

Uma dica adicional. Coloque a opção '-P' após o comando scp, não importando se a máquina em que você está inserindo o equipamento é a segunda (também conhecida como destino). Exemplo:

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

Você sabe o que é mais legal do que -P? nada

Se você usar este servidor mais de algumas vezes, configure / crie um ~/.ssh/configarquivo com uma entrada como:

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

Então você pode usar:

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

ou

scp short:/root/file.txt .

Você pode usar qualquer coisa na linha "Host" com ssh, scp, rsync, git e mais

Existem MUITAS opções de configuração que você pode usar nos arquivos de configuração, consulte:

man ssh_config

Mike
fonte
3
Única solução que permite o uso de scp -3e para servidores com ouvintes ssh em portas diferentes. scp -3 -P 123 server1:/file -P 456 server2:/fileou alternativas semelhantes que não trabalho, scp assumiu a mesma porta em ambos os servidores
user88595
28

Estou usando portas diferentes do padrão e copio arquivos entre arquivos como este:

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

Isso é apenas para uso ocasional; se ele se repete com base em uma programação, você deve usar o trabalho rsync e cron para fazer isso.

Marian Zburlea
fonte
7

para usar outra porta no comando scp use capital P como este

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

ya ali

Hasan Barary
fonte
6

A ajuda do scp informa que a porta é especificada por P. maiúsculo

~$ 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 isto ajude.

DD
fonte
2

Copiando arquivo para o host: scp SourceFile remoteuser@remotehost:/directory/TargetFile

Copiando arquivo do host: scp user@host:/directory/SourceFile TargetFile

Copiando o diretório recursivamente do host: scp -r user@host:/directory/SourceFolder TargetFolder

NOTA : Se o host estiver usando uma porta diferente da porta 22, você poderá especificá-la com a opção -P: scp -P 2222 user@host:/directory/SourceFile TargetFile

AJ.
fonte
6
Apenas o NOTA seria enought
Blagus
2

Isso pode ser obtido especificando a porta através do -Pswitch:

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

se você precisar copiar o arquivo local para o servidor (especifique a porta)

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

Espero que isso ajude alguém que procura uma resposta perfeita

Copiando uma pasta ou arquivo de um servidor com uma porta definida para outro servidor ou máquina local

  1. Vá para um diretório em que você tem direitos de administrador, de preferência o diretório inicial na máquina em que deseja copiar os arquivos.
  2. Escreva o comando abaixo

usuário da porta scp -r -P @ endereço_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
fonte
0

Existem muitas respostas, mas você deve ser capaz de simplificar. Certifique-se de saber em que porta o SSH está escutando e defina-o. Aqui está o que eu acabei de usar para replicar seu problema.

scp -P 12222 file.7z [email protected]: / home / user / Downloads Funcionou bem.

HarteScout 1
fonte