通过SSH网关连接的SCP


8

我的网络布局是这样的:

现在,Alice可以使用以下命令访问SSH网关(从现在开始就是网关):

ssh alice@external.ip

网关上的授权密钥文件如下所示

#/home/Alice/.ssh/authorized_keys
command="ssh -t alice@web" ssh-rsa ABCD...E== alice@somehost

因此,当Alice尝试使用她的私钥连接到网关时,她实际上已连接到Web服务器(网关PC可以使用无密码私钥与Web服务器建立连接,从而保持透明)。

问题

  1. 我该如何进行设置,以便Alice也可以将内容发送到Web服务器?

  2. 我知道这建立了一个单独的连接,但是有没有办法使它像普通的ssh一样-R12345:localhost:22工作,即使是类似的东西也可以工作?

Answers:


10

如果要访问另一个ssh服务器后面的ssh服务器,只需使用“ ProxyCommand”。示例:添加到.ssh / config

Host Alice  
   User myLoginAtAlice # optional 
   ProxyCommand ssh -o Compression=no gateway netcat -w 90 %h %p
   ServerAliveInterval 30
   Compression yes

Host gateway
   HostName gateway.public.ip
   User myLoginAtTheGateway # optional 
   Compression yes

然后,您可以直接使用“ Alice”作为主机名直接“ ssh Alice”或“ rsync”或“ scp”。魔法对客户是隐藏的。

这样,在网络拓扑/配置发生更改的情况下,您可以快速重新配置ssh,而只需更改.ssh / config,而不必更改每个脚本。

说明:ssh使用作为“代理命令”给出的命令作为传输,而不是直接的TCP连接。Netcat是一种网络工具,(在数百万其他功能中)仅将其stdin / stdout重定向到指定的远程主机。因此,“ ssh网关nc sshserver 22”将您连接到该计算机的ssh服务器。%h是主机名,%p是端口。通过这种设置,您可以指定“端口N”来更改端口,而无需更改ProxyCommand行。

我激活对最终计算机的压缩,并禁用外部压缩,因为压缩加密或压缩的数据不会进一步减少数据量。当然,任何对压缩设置的摆弄也是可选的。


还有一个问题,如果我有到网关计算机的自定义端口,则rysnc不能那样工作。有什么想法。
zidarsk8 '08 / 10/17

将“ Port port_number”添加到.ssh / config的相关部分。请阅读ssh_config和sshd_config手册页。他们提供了大量信息,可能会给您带来很多启发。
劳尔·萨利纳斯-蒙塔古多

我的意思是,如果指定了其他端口,则rsync无法正常工作。我已经配置了端口,以便连接可以正常工作,但是rsync导致了我的问题。
zidarsk8 2012年

3

我遇到了与此完全相同的问题,但是我无需进行任何根本性的更改即可使它工作。

我所做的就是将$ SSH_ORIGINAL_COMMAND添加到网关authorized_keys中,以通过链中的所有内容传递到最终服务器。

所以这:

#/home/Alice/.ssh/authorized_keys
command="ssh -t alice@web" ssh-rsa ABCD...E== alice@somehost

成为:

#/home/Alice/.ssh/authorized_keys
command="ssh -q -t alice@web $SSH_ORIGINAL_COMMAND" ssh-rsa ABCD...E== alice@somehost

-q用于禁止来自端点计算机的连接关闭消息,因此,如果在本地使用重定向,则它不会最终出现在本地输出中。

然后,您可以像这样使用scp:

scp localFileName alice@exernal.ip:/path/on/end/point/remoteFileName

这样做还有一个好处,就是允许用户将命令通过命令传递到端点服务器,并将结果返回到本地会话中,这样他们就可以将它们重定向到文件中,或者通过管道将它们传递到其他程序中。

例如:

ssh -t alice@external.ip "ls -l" > tmp

之所以可行,是因为sshd似乎使用ssh客户端指定的命令填充了环境变量$ SSH_ORIGINAL_COMMAND,但是我不确定为什么奇迹般地允许scp以及命令传递给端点机器。


0

不幸的是,端口转发无助于使用将文件从Alice的工作站直接复制到Web服务器scp。在这篇SO帖子中,我解释了为什么ssh(以及scp使用相同的身份验证机制)不适用于使用ssh进行端口转发的连接。

选项是在现在充当SSH网关的计算机上设置VPN服务器,连接到该服务器,然后直接访问防火墙后面的任何计算机。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.