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

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

Я пробовал:

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

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

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

Ответ 1

В отличие от 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 ption, который не является аргументом option, или после первого вхождения '-'. Если в первой части не найдено ни одной опции "-o" или "- -o ptions", в качестве строки коротких опций используется первый параметр второй части.

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

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

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

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

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

man 1 getopt

Ответ 2

Еще один намек. Поместите параметр "-P" после команды scp, независимо от того, является ли машина, в которой вы находитесь, второй (aka destination). Пример:

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

Ответ 3

Вы знаете, что круче, чем -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 [email protected]:/root/file.txt .

или

scp short:/root/file.txt .

Вы можете использовать что-либо в строке "Host" с помощью ssh, scp, rsync, git и более

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

man ssh_config

Ответ 4

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

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

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

Ответ 5

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

~$ scp
usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[[email protected]]host1:]file1 ... [[[email protected]]host2:]file2

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

Ответ 6

Копирование файлов для размещения: scp SourceFile [email protected]:/directory/TargetFile

Копирование файлов с хоста: scp [email protected]:/directory/SourceFile TargetFile

Копирование каталога рекурсивно от хоста: scp -r [email protected]:/directory/SourceFolder TargetFolder

Примечание: Если хост использует порт, отличный от порта 22, вы можете указать его с помощью опции -P: scp -P 2222 [email protected]:/directory/SourceFile TargetFile

Ответ 7

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

scp -i ~/keys/yourkey -P2222 file [email protected]:/directory/

Ответ 8

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

scp -P 3838 /the/source/file [email protected]:/destination/file

Ответ 9

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

scp -P port-number source-file/directory [email protected]:/destination

я али