scp с указанным номером порта

795

Я пытаюсь скопировать файл с удаленного сервера на мою локальную машину. Доступен только порт 80.

Я старался:

scp -p 80 username@www.myserver.com:/root/file.txt .

но получил эту ошибку: cp: 80: No such file or directory

Как мне указать номер порта в команде scp?

Раз два три
источник
33
порт должен быть в столице -P 80
Eliethesaiyan

Ответы:

1408

В отличие от ssh, scp использует ключ P в верхнем регистре для установки порта вместо p:

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

Переключатель строчных букв p используется вместе с scp для сохранения времени и режимов.

Вот выдержка из справочной страницы scp со всеми подробностями, касающимися этих двух ключей, а также объяснение того, почему прописная буква P была выбрана для scp:

-P порт Указывает порт для подключения к удаленному хосту. Обратите внимание, что эта опция написана с большой буквы «P», потому что -p уже зарезервирован для сохранения времен и режимов файла в rcp (1).

-p Сохраняет время изменения, время доступа и режимы из исходного файла.

Обновите и оставьте в стороне один из комментариев (с большим количеством голосов) :

Что касается комментария Абдулла об scpопционном порядке, то, что он предлагает:

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

..., перемежает параметры и параметры. getopt(1)четко определяет, что параметры должны следовать за опциями, а не перемежаться с ними:

Параметры, с которыми вызывается getopt, можно разделить на две части: параметры, которые изменяют способ синтаксического анализа, выполняемый getopt (параметры и строка выбора в ОПИСАНИИ), и параметры, которые необходимо проанализировать (параметры в ОПИСАНИИ). Вторая часть начинается с первого неопционального параметра, который не является опциональным аргументом, или после первого появления «-». Если в первой части не найдено ни опции '-o', ни '--options', в качестве строки коротких опций используется первый параметр второй части.

Поскольку -rопция командной строки не принимает никаких дополнительных аргументов, some_directoryэто «первый необязательный параметр, который не является аргументом опции». Следовательно, как четко указано в getopt(1)справочной странице, все последующие аргументы командной строки, которые следуют за ней (т. Е. -P 80 ...), Считаются не опциями (и не опциями).

Таким образом, по сути, так выглядит getopt(1)пример, представленный с окончанием параметров и началом параметров, разграниченных последовательным бингом текста серым цветом:

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

Это не имеет ничего общего с scpповедением и связано с тем, как стандартные приложения POSIX анализируют параметры командной строки, используя getopt(3)набор функций C.

Для получения более подробной информации о порядке и обработке командной строки, пожалуйста, прочитайте getopt(1)справочную страницу, используя:

man 1 getopt
Михаил Гольдштейн
источник
88
Кстати, scpтребует правильной настройки порядка: scp -r some_directory -P 80 ...не работает -----, но scp -P 80 -r some_directory ...работает.
Абдул
9
как правило, в Linux после команды следуют параметры и затем инструкции / значения
Гари
2
@ Обратите внимание, что каталог scp -r -p 50193 / path / to / также работает. Параметр пути к файлу не связан с опцией -r рекурсии.
Бенджамин
6
@Benjamin Если вы не хотели использовать порт 50193, в этом случае ваш 'p' должен быть заглавным.
Нет
1
@Abdull: есть ответ на askubuntu.com/a/307078/37574 , что объясняет -Pпорядок параметров. В основном, порт должен идти перед хостом. Это предотвращает неоднозначность и позволяет использовать два -Pпараметра, если оба хоста являются удаленными.
mwfearnley
70

Еще один совет. Поместите опцию '-P' после команды scp, независимо от того, является ли машина, на которую вы устанавливаете ssh, второй (то есть, пункт назначения). Пример:

scp -P 2222 /absolute_path/source-folder/some-file user@example.com:/absolute_path/destination-folder
Gooshan
источник
46

Вы знаете, что круче чем -P? ничего

Если вы используете этот сервер несколько раз, настройте / создайте ~/.ssh/configфайл с записью, подобной следующей:

Host www.myserver.com
    Port 80

или

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

Тогда вы можете использовать:

scp username@www.myserver.com:/root/file.txt .

или

scp short:/root/file.txt .

Вы можете использовать все что угодно в строке «Хост» с помощью ssh, scp, rsync, git & more

Есть много вариантов конфигурации, которые вы можете использовать в конфигурационных файлах, см .:

man ssh_config

Майк
источник
3
Единственное решение, которое позволяет использовать scp -3от и до серверов с слушателями ssh на разных портах. scp -3 -P 123 server1:/file -P 456 server2:/fileили аналогичные альтернативы не
сработают
28

Я использую разные порты, а затем стандартные и копировать файлы между файлами, как это:

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

Это только для случайного использования, если оно повторяется по расписанию, вы должны использовать для этого задания rsync и cron.

Мариан Збурлеа
источник
7

для использования другого порта в команде scp используйте прописную букву P, как это

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

я али

Хасан Барари
источник
6

Справка scp сообщает нам, что порт указан заглавной буквой P.

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

Надеюсь это поможет.

DD
источник
2

Копирование файла на хост: scp SourceFile remoteuser@remotehost:/directory/TargetFile

Копирование файла с хоста: scp user@host:/directory/SourceFile TargetFile

Рекурсивное копирование каталога с хоста: scp -r user@host:/directory/SourceFolder TargetFolder

ПРИМЕЧАНИЕ . Если хост использует порт, отличный от порта 22, вы можете указать его с помощью опции -P: scp -P 2222 user@host:/directory/SourceFile TargetFile

AJ.
источник
6
Только примечание будет достаточно
Blagus
2

Этого можно достичь, указав порт через -Pкоммутатор:

scp -i ~/keys/yourkey -P2222 file ubuntu@host:/directory/
Vaseem007
источник
2

если вам нужно скопировать локальный файл на сервер (укажите порт)

scp -P 3838 /the/source/file username@server.com:/destination/file
Туран Заманлы
источник
0

Надеюсь, что это поможет кому-то в поисках идеального ответа

Копирование папки или файла с сервера с портом, определенным на другой сервер или локальный компьютер

  1. Перейдите в каталог, в котором у вас есть права администратора, предпочтительно ваш домашний каталог на компьютере, куда вы хотите скопировать файлы
  2. Напишите команду ниже

scp -r -P порт 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

Есть много ответов, но вы должны быть простыми. Убедитесь, что вы знаете, какой порт SSH прослушивает, и определите его. Вот что я использовал, чтобы повторить вашу проблему.

scp -P 12222 file.7z user@193.168.XX: / home / user / Downloads Это хорошо сработало.

HarteScout 1
источник