指定端口号的scp命令

我正在尝试从远程服务器通过scp命令将文件传输到我的本地机器。只有80端口是可访问的。

我尝试了:

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

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

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


与ssh不同,scp使用大写的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)中保留文件的时间和模式。保留修改时间、访问时间和模式来自原始文件。

附加提示:如何确定SSH守护进程使用的端口以接受SSH连接?这个问题可以通过使用netstat实用程序来回答,如下所示:

sudo netstat -tnlp | grep sshd

或者,使用更易读的基于单词的netstat选项名称:

sudo netstat --tcp --numeric-ports --listening --program | grep sshd

假设你的SSH守护进程配置为默认值,你将看到以下输出(为了使整个表格可见而无需滚动,稍微修剪了列之间的空白):

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address  Foreign Address  State       ID/Program name
tcp      0      0   0.0.0.0:22     0.0.0.0:*        LISTEN      888/sshd: /usr/sbin 
tcp6     0      0   :::22          :::*             LISTEN      888/sshd: /usr/sbin 

重要说明:在上述示例中,使用sudo以管理员权限运行netstat,以便能够看到所有程序名称。如果你以普通用户身份运行netstat(即,没有sudo,并且假设你没有通过其他方法获得管理权限),你只会看到以你为所有者的套接字的程序名称。属于其他用户的套接字的程序名称将不会显示(即,将被隐藏,并显示一个占位符破折号)。

Proto Recv-Q Send-Q Local Address   Foreign Address  State       ID/Program name
tcp        0      0 127.0.0.1:46371 0.0.0.0:*        LISTEN      4489/code
...
tcp        0      0 0.0.0.0:111     0.0.0.0:*        LISTEN      -                   
tcp        0      0 127.0.0.53:53   0.0.0.0:*        LISTEN      -                   
tcp        0      0 0.0.0.0:22      0.0.0.0:*        LISTEN      -                   
...

更新和附注以解决其中一个(大量投票)评论:关于Abdul l关于scp选项顺序的评论,他建议:

scp -r some directory -p 80 ..

这将选项和参数交错在一起,因为-r开关不需要额外的参数,some directory被视为命令的第一个参数,使得-p和所有后续命令行参数看起来像是命令的附加参数(即,我们带有破折号前缀的参数不再被视为开关)。getopt(1)清楚地定义了参数必须在选项之后,而不是随意地与它们交错在一起:getopt调用的参数可以分为两部分:修改getopt解析方式的选项(SYNOPSIS中的选项和optstring),以及要解析的参数(SYNOPSIS中的参数)。第二部分将从第一个非选项参数开始,该参数不是选项参数,或在第一次出现’–‘之后开始。如果在第一部分中没有找到’-o’或’–options’选项,则使用第二部分的第一个参数作为选项字符串。

由于-r命令行选项不需要进一步的参数,some directory是“第一个非选项参数,不是选项参数。”因此,正如getopt(1)手册页中明确指出的那样,其后所有后续命令行参数都被视为非选项(和非选项参数)。因此,getopt(1)将示例视为选项结束和参数开始由灰色文本分隔:

scp -r some directory -p 80 ...

这与scp行为无关,而是与POSIX标准应用程序如何使用getopt(3) C函数集解析命令行选项有关。有关命令行顺序和处理的更多详细信息,请使用以下命令阅读getopt(1)手册页:

man 1 getopt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李星星BruceL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值