指定端口号的scp

One*_*ree 720 port scp

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

我试过了:

scp -p 80 username@www.myserver.com:/root/file.txt .
Run Code Online (Sandbox Code Playgroud)

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

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

Mic*_*eyn 1291

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

scp -P 80 ... # Use port 80 to bypass the firewall, instead of the scp default
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

更新并在旁边解决其中一个(大量投票)评论:

关于Abdull关于scp期权订单的评论,他建议:

scp -P80 -r some_directory -P 80 ...
Run Code Online (Sandbox Code Playgroud)

......,散布选项和参数.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标准应用程序如何使用getopt(3)C函数集解析命令行选项有关.

有关命令行排序和处理的更多详细信息,请阅读getopt(1)联机帮助页:

man 1 getopt
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,`scp`要求正确的选项顺序:`scp -r some_directory -P 80 ...`不起作用-----但是`scp -P 80 -r some_directory ...`有效. (80认同)
  • 通常在linux中,命令后跟选项,然后是指令/值 (8认同)
  • @Benjamin除非您打算使用端口50193,否则您的'p'应该大写. (6认同)
  • @Abdull注意scp -r -p 50193/path/to /目录也可以.文件路径参数与-r recursion选项无关. (2认同)
  • @Abdull:http://askubuntu.com/a/307078/37574 有一个答案解释了“-P”参数排序。基本上,端口必须先于主机。如果两台主机都是远程的,这既可以防止歧义,又可以使用两个“-P”参数。 (2认同)

Goo*_*han 62

一个额外的提示.在scp命令之后放置'-P'选项,无论你正在进入的机器是否是第二个(也就是目的地).例:

scp -P 2222 /absolute_path/source-folder/some-file user@example.com:/absolute_path/destination-folder
Run Code Online (Sandbox Code Playgroud)


Mik*_*ike 41

你知道什么比凉爽-P?没有

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

Host www.myserver.com
    Port 80
Run Code Online (Sandbox Code Playgroud)

要么

Host myserver myserver80 short any.name.u.want yes_anything well-within-reason
    HostName www.myserver.com
    Port 80
    User username
Run Code Online (Sandbox Code Playgroud)

然后你可以使用:

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

要么

scp short:/root/file.txt .

您可以在"主机"行使用ssh,scp,rsync,git等更多内容

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

man ssh_config

  • 唯一允许在不同端口上带有ssh侦听器的服务器之间使用scp -3的解决方案。`scp -3 -P 123 server1:/ file -P 456 server2:/ file`或类似的替代方法不起作用,scp假设两台服务器上的端口相同 (2认同)

Mar*_*lea 28

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

scp -P 1234 user@[ip address or host name]:/var/www/mywebsite/dumps/* /var/www/myNewPathOnCurrentLocalMachine
Run Code Online (Sandbox Code Playgroud)

这仅适用于偶尔使用,如果它根据计划重复,您应该使用rsync和cron job来执行此操作.


Raf*_*ier 9

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

来自 man scp:

源和目标可以指定为本地路径名、具有可选路径(格式为 [user@]host:[path])的远程主机或格式为 scp://[user@]host[:port] 的 URI [/小路]。可以使用绝对或相对路径名明确本地文件名,以避免 scp 将包含“:”的文件名视为主机说明符。

例子:

scp local/filename scp://user@acme.com:22222/path/to/filename
scp scp://userA@foo.com:22222/path/to/filename scp://userB@bar.com:33333/path/to/filename
Run Code Online (Sandbox Code Playgroud)

/请注意,如果您的路径来自根目录,则路径中需要有两个s。例如,

scp local/filename scp://user@acme.com:22222//root/path/to/filename
Run Code Online (Sandbox Code Playgroud)


Vas*_*007 6

这可以通过-P交换机指定端口来实现:

scp -i ~/keys/yourkey -P2222 file ubuntu@host:/directory/
Run Code Online (Sandbox Code Playgroud)


D D*_*D D 5

scp help告诉我们端口由大写字母P指定。

~$ 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
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。


Has*_*ary 5

为了在scp命令上使用另一个端口,请使用大写字母P

scp -P port-number source-file/directory user@domain:/destination
Run Code Online (Sandbox Code Playgroud)

亚里


hue*_*990 5

scp -P 22 -r DIR  huezo@192.168.1.100:/home/huezo

scp -P PORT -r DIR  USER@IP:/DIR
Run Code Online (Sandbox Code Playgroud)