2023-04-14 05:00:00

指定端口号的SCP

我试图scp文件从远程服务器到我的本地机器。只有80端口可访问。

我试着:

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

cp: 80:没有这样的文件或目录

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


当前回答

我使用不同的端口然后标准和复制文件之间的文件,像这样:

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

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

其他回答

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

scp -i ~/keys/yourkey -P2222 file ubuntu@host:/directory/
scp -P 22 -r DIR  huezo@192.168.1.100:/home/huezo

scp -P PORT -r DIR  USER@IP:/DIR

与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 port远端主机上要连接的端口。注意,这个选项是用大写的“P”写的,因为-p已经是 用于保存rcp(1)中文件的时间和模式。 -p保留原始文件的修改时间、访问时间和模式。

额外提示:如何确定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 

重要提示

For the above examples, sudo was used to run netstat with administrator privs, in order to be able to see all of the Program Names. If you run netstat as a regular user (i.e., without sudo and assuming you don't have admin rights granted to you, via some other method), you will only see program names shown for sockets that have your UID as the owner. The Program Names for sockets belonging to other users will not be shown (i.e., will be hidden and a placeholder hyphen will be displayed, instead):

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      -                   
...

更新和旁白来解决一个(被大量点赞)的评论:

关于Abdull关于scp期权顺序的评论,他的建议是:

scp -r some_directory -P 80 ...

...,因为-r开关不接受额外的参数,some_directory被视为命令的第一个参数,使得-P和所有后续命令行参数看起来像命令的额外参数(即,带连字符前缀的参数不再被视为开关)。

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)如何看待以灰色文本划分的选项结尾和参数开头的示例:

scp -r some_directory -P 80…

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

有关命令行排序和处理的更多细节,请使用以下命令阅读getopt(1) manpage:

man 1 getopt

希望这对寻找完美答案的人有所帮助

将具有定义端口的服务器上的文件夹或文件复制到另一台服务器或本地计算机

转到您有管理权限的目录,最好是您想要复制文件的机器上的主目录 编写下面的命令

scp -r -P port 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

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

如果您多次使用此服务器,请设置/创建~/。Ssh /config文件的入口如下:

Host www.myserver.com
    Port 80

or

Host myserver myserver80 short any.name.u.want yes_anything well-within-reason
    HostName www.myserver.com
    Port 80
    User username

然后你可以使用:

SCP用户名@www.myserver.com:/root/file.txt。

or

SCP短:/root/file.txt。

你可以使用任何在“主机”行ssh, scp, rsync, git和更多

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

男人ssh_config