首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为远程服务器指定scp端口?

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

Unix & Linux用户
提问于 2019-08-16 08:04:49
回答 1查看 8.2K关注 0票数 0

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

代码语言:javascript
运行
复制
scp remote1:~/testSCP remote2@10.0.1.10:~/

我在本地机器上设置了~/ssh/config,因此默认情况下它使用的是端口2222

但是远程1‘S默认ssh端口在ssh配置中被设置为22,而不是端口2222。因此,要通过ssh进行任何外部连接,默认情况下它使用端口22

我尝试了以下几种不起作用的方法:

代码语言:javascript
运行
复制
scp -P 2222 remote1:~/testSCP remote2@10.0.1.10:~/

还尝试了以下几点,但也不起作用:

代码语言:javascript
运行
复制
scp remote1:~/testSCP -P 2222 remote2@10.0.1.10:~/

对于这两种情况,我得到了以下错误:

代码语言:javascript
运行
复制
ssh: connect to host 10.0.1.10 port 22: Connection refused
lost connection

这是正确的,因为10.0.1.10使用的是端口2222而不是端口22

在尝试从remote1 (remote2)向10.0.1.10 (Remote2)发送文件时,如何指定remote1使用端口D14

更新

试过

代码语言:javascript
运行
复制
 scp -3 remote1:~/testSCP remote2@10.0.1.10:~/

我会有奇怪的行为。尽管我的密码是正确的,但它给了我以下输出:

代码语言:javascript
运行
复制
remote1@10.0.1.9's password: remote2@10.0.1.10's password: 
Permission denied, please try again.
remote1@10.0.1.9's password: 
Permission denied, please try again.
remote1@10.0.1.9's password:

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

新更新

在尝试了几种方法之后,我能够在脚本中通过本地主机通过ssh登录到remote1,然后从remote1登录到remote2。然而,这并没有回答我的问题。我打算直接从本地机器传输文件,然后在两个实例之间传输文件,如果两个实例的ssh守护进程使用的端口与ssh连接的默认端口不同,则不支持这些文件。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-08-16 09:44:28

您不能用简单的远程到远程scp来实现这一点。

相反,ssh转到第一个远程主机并运行scp,其中包含一个端口参数:

代码语言:javascript
运行
复制
ssh -p 2222 ruser1@rhost1 scp -P 2222 /rpath/1 ruser2@rhost2:/rpath/2

如果您想要做scp正在做的事情,也可以将-n -x -oClearAllForwardings=yes选项添加到ssh中,尽管这通常不需要。

更新版本的scp支持uri规范(包括端口),而不是host:path,但只在使用-3选项(“通过本地主机传递”)时才支持。

所以你可能需要

代码语言:javascript
运行
复制
scp -3 -P 2222 ruser1@rhost1:/rpath/1 scp://ruser2@rhost2:2222//rpath/2

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

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

代码语言:javascript
运行
复制
scp -3 localhost:.bashrc localhost:/foo/bar/baz

我没有深入到这件事中去--只是避开了它;-)

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

代码语言:javascript
运行
复制
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变量仅通过解析scp:// uri来设置,而且它根本不存在于7.6p1 (2017年10月)以上的版本中。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/535852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档