如何为远程服务器指定scp端口?

如何为远程服务器指定scp端口?

我有两个远程节点,我正在尝试将文件从一个节点发送到另一个节点。

scp remote1:~/testSCP [email protected]:~/

我已经~/ssh/config在本地计算机中进行了设置,因此默认情况下使用端口2222

22但在 ssh 配置中,remote1 的默认 ssh 端口设置为port ,而不是 port 2222。因此,要通过 ssh 进行任何外部连接,它22默认使用端口。

我尝试了以下方法但没有成功:

scp -P 2222 remote1:~/testSCP [email protected]:~/

还尝试了以下方法,也不起作用:

scp remote1:~/testSCP -P 2222 [email protected]:~/

对于这两个我都收到以下错误:

ssh: connect to host 10.0.1.10 port 22: Connection refused
lost connection

这是正确的,因为10.0.1.10使用的是 port2222而不是 port 22

2222当尝试将文件发送到10.0.1.10(remote2)时,如何指定remote1使用端口remote1

更新

尝试后

 scp -3 remote1:~/testSCP [email protected]:~/

我的行为很奇怪。即使我的密码是正确的,它也会给我以下输出:

[email protected]'s password: [email protected]'s password: 
Permission denied, please try again.
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password:

我还没有启用无密钥身份验证。

新更新

在尝试了多种方法之后,我能够在脚本中通过 ssh 从本地主机登录到 Remote1,然后从 Remote1 登录到 Remote2,然后从 Remote1 登录到 Remote2。但是,这并不能回答我的问题。我打算直接从本地计算机执行此操作,然后在两个实例之间传输文件,我认为如果两个实例的 ssh 守护进程使用的端口与 ssh 连接的默认端口不同,则不支持此操作。

答案1

您无法使用简单的远程到远程 scp [1] 来做到这一点。

相反,请 ssh 到第一个远程主机并从那里运行带有端口参数的 scp :

ssh -p 2222 ruser1@rhost1 scp -P 2222 /rpath/1 ruser2@rhost2:/rpath/2

如果您想准确执行scp正在执行的操作,您还可以将-n -x -oClearAllForwardings=yes选项添加到ssh,尽管通常不需要这样做。


[1]:较新版本scp支持 uri 规范(包括端口)而不是host:path,但仅在使用-3选项(“通过本地主机”)时。

所以你可能可以使用

scp -3 -P 2222 ruser1@rhost1:/rpath/1 scp://ruser2@rhost2:2222//rpath/2

(请注意,/后面的host[:port]不是路径的一部分——将在的主目录中scp://user@host/file引用)。./fileuser

但通过本地主机复制速度较慢,而且根据我的经验,它会隐藏错误。例如,尽管无法创建任何/foo/bar/baz文件,但不会打印任何错误消息:

scp -3 localhost:.bashrc localhost:/foo/bar/baz

我没有深入探讨这一点——只是避免了它;-)


如果有人不相信这一切,他们可以看看源代码:

void
toremote(char *targ, int argc, char **argv)
{
   ...
                } else if (host) {      /* standard remote to remote */
                        if (tport != -1 && tport != SSH_DEFAULT_PORT) {
                                /* This would require the remote support URIs */
                                fatal("target port not supported with two "
                                    "remote hosts without the -3 option");
                        }

请注意,该tport变量仅通过解析 uri 来设置scp://,并且它根本不存在于 7.6p1(2017 年 10 月)之前的版本中。

答案2

一种有效的方法是在中设置别名~/.ssh/config

例如,

Host destination
Hostname 10.0.1.10
User remote2
Port 2222

现在,您可以只用作destination“主机名”,从而不必在实际命令中指定主机名/用户/端口。

相关内容