scp з вказаним номером порту


793

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

Я намагався:

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

але отримала цю помилку: cp: 80: No such file or directory

Як вказати номер порту в команді scp?


33
порт повинен бути в столиці -P 80
Eliethesaiyan

Відповіді:


1406

На відміну від ssh, scp використовує верхній регістр P, щоб встановити порт замість малого p:

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

Перемикач нижнього регістру використовується з scp для збереження часу та режимів.

Ось уривок із довідкової сторінки scp із усіма подробицями, що стосуються двох комутаторів, а також пояснення того, чому для scp було обрано верхній регістр P:

-P порт Вказує порт для підключення на віддаленому хості. Зауважте, що цей параметр записується з великої літери "P", оскільки -p вже зарезервований для збереження часу та режимів файлу в rcp (1).

-p Зберігає час модифікації, час доступу та режими з вихідного файлу.

Оновіть та відхилитесь, щоб вирішити один із коментарів :

Що стосується коментаря Абдулла щодо scpзамовлення опціону, він пропонує:

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

..., перетинає параметри та параметри. getopt(1)чітко визначає, що параметри повинні надходити після опцій, а не перемежуватися з ними:

Викликані параметри getopt можна розділити на дві частини: параметри, які змінюють спосіб getopt, будуть робити аналіз (параметри та optstring в SYNOPSIS), а параметри, які підлягають розбору (параметри в SYNOPSIS). Друга частина розпочнеться з першого параметра, який не є опцією, який не є аргументом опції, або після першого появи "-". Якщо параметр '-o' або '--options' не знайдено в першій частині, перший параметр другої частини використовується як рядок коротких параметрів.

Оскільки параметр -rкомандного рядка не бере ніяких додаткових аргументів, some_directoryце "перший параметр, що не є параметром, який не є аргументом параметра". Тому, як чітко прописано на getopt(1)сторінці "man", всі наступні аргументи командного рядка, які слідують за нею (тобто -P 80 ...), вважаються такими, що не є параметрами (та необов'язковими аргументами).

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

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

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

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

man 1 getopt

88
btw, scpвимагає правильного замовлення варіантів: scp -r some_directory -P 80 ...не працює -----, але scp -P 80 -r some_directory ...працює.
Абдул

9
загалом у linux команді слідують параметри, а потім вказівки / значення
Gary

2
@Abdull зауважте, що також працює scp -r -p 50193 / path / to / directory. Параметр шляху файлу не прив’язаний до параметра -r рекурсії.
Бенджамін

6
@Benjamin Якщо ви не мали намір використовувати порт 50193, тоді ваш 'p' має бути використаний з великої літери.
Немає

1
@Abdull: на сторінці askubuntu.com/a/307078/37574 є відповідь, яка пояснює -Pвпорядкування параметрів. В основному порт повинен пройти перед хостом. Це обидва запобігає двозначності та допускає два -Pпараметри, якщо обидва хости віддалені.
mwfearnley

70

Ще один натяк. Розмістіть опцію '-P' після команди scp, незалежно від того, чи машина, на яку ви працюєте, є другою (також адресою призначення). Приклад:

scp -P 2222 /absolute_path/source-folder/some-file user@example.com:/absolute_path/destination-folder

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 та ін

Є багато варіантів конфігурації, які можна використовувати у конфігураційних файлах, див.

man ssh_config


3
Єдине рішення, яке дозволяє використовувати scp -3від і до серверів з ssh слухачами в різних портах. scp -3 -P 123 server1:/file -P 456 server2:/fileабо подібні альтернативи не працюватимуть, scp припустив один і той же порт на обох серверах
user88595

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

Сподіваюсь, це допомагає.


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


6
Просто ПРИМІТКА було б
зрозуміло

2

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

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

2

якщо вам потрібно скопіювати локальний файл на сервер (вкажіть порт)

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

0

Сподіваюся, це допоможе тому, хто шукає ідеальну відповідь

Копіювання папки чи файлу з сервера з портом, визначеним на інший сервер чи локальну машину

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

scp -r -P-порт користувача @ 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 файл.7z user@193.168.XX: / home / user / Завантаження Це добре вийшло.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.