我有两个远程节点,我试图将文件从一个节点发送到另一个节点。
scp remote1:~/testSCP [email protected]:~/
我已经~/ssh/config
在我的本地机器上设置了,所以它2222
默认使用端口。
但是 remote1 的默认 ssh 端口22
在 ssh 配置中设置为,而不是 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) from时,如何指定 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 从我的 localhost 登录到 remote1,然后从 remote1 到 remote2 的 scp 来做到这一点。但是,这并不能回答我的问题。我打算直接从我的本地计算机执行此操作,然后在两个实例之间传输文件,如果两个实例的 ssh 守护程序使用的端口与 ssh 连接的默认端口不同,我认为不支持此操作。
您无法使用简单的远程到远程 scp [1] 来做到这一点。
而不是它,ssh 到第一个远程主机并从那里运行带有端口参数的 scp:
如果您想准确地执行
scp
正在执行的操作,您还可以将-n -x -oClearAllForwardings=yes
选项添加到ssh
,尽管通常不需要这样做。[1]:较新版本的
scp
支持 uri 规范(包括端口)而不是host:path
,但仅在使用-3
选项时(“通过本地主机”)。所以你可能会使用
(请注意,
/
后面的host[:port]
不是路径的一部分——scp://user@host/file
将./file
在user
的主目录中引用)。但是通过本地主机复制既慢又慢,根据我的经验,它会隐藏错误。例如,这不会打印任何错误消息,尽管无法创建任何
/foo/bar/baz
文件:我没有深入了解这一点——只是避免了它;-)
如果有人不相信这一切,他们可以查看源代码:
请注意,该
tport
变量仅通过解析scp://
uri 设置,并且在早于 7.6p1(2017 年 10 月)的版本中根本不存在。