指定端口号的scp

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

我试过:

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

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

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

1252927 次浏览

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

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

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

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

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

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

奖金提示:如何确定/anSSH守护程序用于接受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 nametcp      0      0   0.0.0.0:22     0.0.0.0:*        LISTEN      888/sshd: /usr/sbintcp6     0      0   :::22          :::*             LISTEN      888/sshd: /usr/sbin

重要提示

对于上述示例,sudo用于使用管理员私有权限运行netstat,以便能够看到项目名称中的所有。如果您以普通用户身份运行netstat(即,没有sudo并假设您没有通过其他方法授予您的管理权限),您将只看到以您的UID为所有者的套接字显示的程序名称。属于其他用户的套接字的项目名称将不会显示(即,将被隐藏并显示占位符连字符):

Proto Recv-Q Send-Q Local Address   Foreign Address  State       ID/Program nametcp        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      -...

更新并搁置以解决其中一个(大量赞成)评论

关于阿布杜对scp期权顺序的评论,他建议:

scp -r some_directory -P 80 ...

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

getopt(1)清楚地定义了参数必须来自之后选项(即开关),并且不能随意穿插:

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

由于-r命令行选项不需要进一步的参数,因此some_directory是“第一个不是选项参数的非选项参数”。因此,正如getopt(1)手册页中明确说明的那样,它之后的所有命令行参数(即-P 80 ...)都被假定为非选项(和非选项参数)。

因此,实际上,这就是getopt(1)看到示例的方式,其中选项的末尾和参数的开头由灰色文本划分:

scp-rsome_directory -P 80 ...

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

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

man 1 getopt

我使用不同的端口,然后在文件之间使用标准和复制文件,如下所示:

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

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

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

scp帮助告诉我们port由大写P指定。

~$ scpusage: 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

希望这有帮助。

一个额外的提示。将'-P'选项放在scp命令之后,无论您要ssh-ing的机器是否是第二台(又名目的地)。示例:

scp -P 2222 /absolute_path/source-folder/some-file user@example.com:/absolute_path/destination-folder

你知道什么比0更酷吗?什么都没有

如果您多次使用此服务器,请设置/创建一个~/.ssh/config文件,其中包含以下条目:

Host www.myserver.comPort 80

Host myserver myserver80 short any.name.u.want yes_anything well-within-reasonHostName www.myserver.comPort 80User username

然后你可以使用:

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

scp short:/root/file.txt .

您可以使用“主机”行上的任何内容,包括ssh、scp、rsync、git等

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

man ssh_config

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

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

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

scp -P 3838 /the/source/file username@server.com:/destination/file

对于使用scp命令上的另一个端口,请像这样使用大写P

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

yaali

希望这能帮助那些寻找完美答案的人

从定义了端口的服务器复制文件夹或文件到另一台服务器或本地机器

  1. 转到您要将文件复制到的机器上具有管理员权限最好是你的主目录的目录
  2. 写下面的命令

scp-r-P端口user@IP_address:/home/file/path Directory.

**Note:** The last . on the command directs it to copy everything in that folder to your directory of preference

答案有很多,但你应该保持简单。确保你0SSH在听,并定义它。这是我刚刚用来复制你的问题的。

scp-P 12222 file.7zuser@193.168.X.X:/home/user/下载效果不错

要使用不同的远程端口将所有目录中的所有文件备份到远程Synology NAS:

scp-P 10022-r /media/data/somedata/*user@192.168.1.x:/var/服务/家庭/用户/目录/

可以使用scp协议路径指定端口:scp://[user@]host[:port][/path]

来自man scp:

源和目标可以指定为本地路径名、具有可选路径的远程主机,形式为[user@]host:[path],或形式为URIscp://[user@]host[: port][/path]。本地文件名可以使用绝对或相对路径名显式显示,以避免scp处理包含“:”的文件名作为主机说明符。

示例:

scp local/filename scp://user@acme.com:22222/path/to/filenamescp scp://userA@foo.com:22222/path/to/filename scp://userB@bar.com:33333/path/to/filename

请注意,如果您的路径是从/root开始的,则您的路径中需要有两个/。例如,

scp local/filename scp://user@acme.com:22222//root/path/to/filename
scp -P 22 -r DIR  huezo@192.168.1.100:/home/huezo
scp -P PORT -r DIR  USER@IP:/DIR