指定端口号的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

Answers:


1406

与ssh不同,scp使用大写的P开关设置端口,而不是小写的p:

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

小写的p开关与scp一起使用以保留时间和模式。

这是scp手册页的摘录,其中包含有关两个开关的所有详细信息,并解释了为什么为scp选择大写P:

-P端口指定要在远程主机上连接的端口。请注意,此选项用大写字母“ P”编写,因为-p已保留用于保留rcp(1)中文件的时间和模式。

-p保留原始文件的修改时间,访问时间和模式。

更新并搁置以解决(严重反对)评论之一

关于阿卜杜勒对scp期权定单的评论,他的建议是:

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

...,点缀选项和参数。getopt(1)明确定义参数必须在选项之后,并且不能与选项一起使用:

调用参数getopt可以分为两部分:修改getopt进行解析方式的选项(SYNOPSIS中的选项和optstring)以及要解析的参数(SYNOPSIS中的参数)。第二部分将从不是选项参数的第一个非选项参数开始,或者在第一次出现“-”之后。如果在第一部分中没有找到“ -o”或“ --options”选项,则将第二部分的第一个参数用作简短选项字符串。

由于-r命令行选项不包含其他参数,因此some_directory为“不是选项参数的第一个非选项参数”。因此,如getopt(1)手册页中明确指出的那样,所有紧随其后的命令行参数(即-P 80 ...)都假定为非选项(和非选项参数)。

因此,实际上,这是如何getopt(1)看到示例的结果,其中选项的末尾和参数的开头由灰色的后续文本bing划定:

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 ...可以。
阿卜杜勒2014年

9
通常在linux中,命令后跟选项,然后是指令/值
Gary

2
@Abdull注意,scp -r -p 50193 / path / to /目录也可以正常工作。文件路径参数未与-r递归选项绑定。
本杰明

6
@Benjamin除非您打算使用端口50193,否则您的'p'应该大写。

1
@Abdull:有上述问题的回答askubuntu.com/a/307078/37574解释的-P参数排序。基本上,端口必须在主机之前。-P如果两个主机都是远程的,这既可以防止歧义,又可以提供两个参数。
mwfearnley '16

70

另一提示。不管您要挂入的计算机是否是第二台计算机(也称为目标计算机),在scp命令后都放置“ -P”选项。例:

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 '19

28

我使用的端口不同于标准端口,并且在文件之间复制文件,如下所示:

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

这仅用于偶尔使用,如果它根据计划重复进行,则应使用rsync和cron作业来执行此操作。



6

scp help告诉我们端口由大写字母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

如果需要将本地文件复制到服务器(请指定port)

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效果很好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.