指定端口号的scp

scp with port number specified

我正在尝试将文件从远程服务器scp到本地计算机。只有端口80可以访问。

我试过:

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

但得到了这个错误:cp: 80: No such file or directory

如何在scp命令中指定端口号?


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

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

小写的p开关与scp一起使用,用于保存时间和模式。

以下是SCP手册页的摘录,其中包含有关两个开关的所有详细信息,以及为什么选择大写P作为SCP的解释:

-P port   Specifies the port to connect to on the remote host. Note that this option is written with a capital 'P', because -p is already
reserved for preserving the times and modes of the file in rcp(1).

-p           Preserves modification times, access times, and modes from the original file.

更新并搁置以解决其中一个(严重反对)意见:

关于Abdull对scp期权指令的评论,他建议:

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

…,分散选项和参数。getopt(1)明确定义参数必须在选项后出现,不能与选项穿插:

The parameters getopt is called with can be divided into two parts: options which modify the way getopt will do the parsing (the options and the optstring in the SYNOPSIS), and the parameters which are to be parsed (parameters in the SYNOPSIS). The second part will start at
the first non-option parameter that is not an option argument, or after the first occurrence of '--'. If no '-o' or '--options' option is found in the first part, the first parameter of the second part is used as the short options string.

由于-r命令行选项不接受进一步的参数,因此some_directory是"第一个非选项参数,它不是选项参数。"因此,正如getopt(1)手册页中明确指出的那样,它后面的所有后续命令行参数(即-P 80 ...被假定为非选项(和非选项参数)。)

因此,实际上,这就是getopt(1)如何看待选项末尾和参数开头的示例,这些参数由后面的灰色文本bing界定:

SCP-P80-R some_directory -P 80 ...

这与scp行为无关,与posix标准应用程序如何使用getopt(3)组C函数解析命令行选项有关。

有关命令行排序和处理的更多详细信息,请阅读getopt(1)手册页,使用:

1
man 1 getopt


另外一个提示。将'-p'选项放在scp命令之后,不管您要ssh进入的机器是否是第二台机器(也就是目的地)。例子:

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


你知道什么比-P更酷吗?没有什么

如果您多次使用此服务器,请设置/创建一个带有如下条目的~/.ssh/config文件:

1
2
Host www.myserver.com
    Port 80

1
2
3
4
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 .

您可以将"主机"行上的任何内容与ssh、scp、rsync、git等一起使用

在配置文件中可以使用许多配置选项,请参见:

man ssh_config


我正在使用不同的端口,然后是标准端口,并在以下文件之间复制文件:

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

这只是偶尔使用,如果它根据调度重复自己,您应该使用rsync和cron作业来完成它。


SCP帮助告诉我们端口是由大写的P指定的。

1
2
3
4
~$ 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

希望这有帮助。


要在scp命令上使用另一个端口,请使用类似capital p的命令

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

雅丽


正在将文件复制到主机: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


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

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

这可以通过通过-P开关指定端口来实现:

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