我正在尝试将文件从远程服务器发送到本地计算机。仅可访问端口 80。
我试过了:
scp -p 80 [email protected]:/root/file.txt .
但收到此错误: cp: 80: No such file or directory
如何在 scp 命令中指定端口号?
与 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 标准应用程序如何使用 C 函数的getopt(3)
集解析命令行选项无关。
有关命令行排序和处理的更多详细信息,请使用以下内容阅读getopt(1)
页:
man 1 getopt
另一个提示。不管您要挂入的计算机是否是第二台计算机(也称为目标计算机),在 scp 命令后都放置 “-P” 选项。例:
scp -P 2222 /absolute_path/source-folder/some-file [email protected]:/absolute_path/destination-folder
您知道什么比-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 .
您可以通过 ssh,scp,rsync,git 等在 “主机” 行上使用任何东西
您可以在配置文件中使用许多配置选项,请参见:
man ssh_config