我对使用 ssh 的 ProxyCommand 功能很满意,并且可以使用它来跳过多个堡垒主机以有效地到达最终主机。但我似乎无法理解它在后端实际上是如何工作的。
例如。我有以下配置文件。
Host final
Hostname final.com
Port 22
AgentForwarding yes
User guestuser
ProxyCommand "ssh user@bastion.com -W %h:%p"
Run Code Online (Sandbox Code Playgroud)
我知道为了连接到主机final
,ProxyCommand 将在连接到final.com
. 但我似乎仍然无法理解连接的顺序。
选项有-W %h:%p
什么作用?我知道这是 netcat 功能,类似于nc %h %p
.
所以就我的理解而言,这里是操作的顺序。如果我错了,请告诉我。我将在我的示例中使用上面指定的配置文件。
ssh final
ssh final
命令将上述连接作为代理并通过此现有连接传输其数据。另外我还想知道这种技术是否也称为ssh stacking?
添加换行符
我们公司有多个 Windows 服务器在 NAT 防火墙后面运行。我们希望向我们的用户提供对这些机器的远程桌面访问。
解决方案之一是通过端口转发。我们可以将 RDP 设置为在特定端口上运行,并从防火墙转发该端口。但是,这会在防火墙上打开很多端口,我们不想使用这种策略。
我在想是否有类似于 ssh 网关的解决方案。(是否有基于名称的虚拟主机 SSH 反向代理?)
有没有其他解决办法。
谢谢
我在我的桌面上运行 CentOS 6.5。我已经设置了Network Proxy
使用下提供的网络代理应用程序Preferences
。我还设置了以下例外: localhost,127.0.0.0/8,172.16.0.0/12,192.168.0.0./16
但是每当我使用 wget(我正在使用 wget 测试代理设置)时,wget 都会尝试连接到私有地址的代理,但wget localhost
工作正常并且不使用代理。
我还删除了所有代理设置并在 shell 中设置了代理:
export http_proxy="<proxy_url>:<port>"
export https_proxy="<proxy_url>:<port>"
export no_proxy="localhost,127.0.0.0/8,172.16.0.0/12,192.168.0.0./16"
Run Code Online (Sandbox Code Playgroud)
它工作时,我用命令wget <external_url>
或者wget localhost
但是当我使用该命令将失败wget <private address from the $no_proxy variable>
。
我还尝试在 Ubuntu 14.04 中设置变量并面临同样的问题。
编辑:我发现 shell 忽略了 CIDR 表示法。如果我需要在没有代理的情况下浏览 127.0.0.1 那么我需要在no_proxy
变量中输入 127.0.0.1而不是 127.0.0.0/8
proxy ×2
bash ×1
http-proxy ×1
linux ×1
nat ×1
rdp ×1
security ×1
ssh ×1
ssh-tunnel ×1
windows ×1