在工作中我们当然有公司的代理人。我需要通过 ssh 连接到公司网络之外的一些机器。但是,代理需要身份验证。
假设我们有以下变量:
proxy_user="<username I need to authenticate at the proxy>"
proxy_pass="<password I need to authenticate at the proxy>"
proxy_serv="<hostname of the proxy>"
proxy_port=<port of the proxy>
ssh_user="<remote username I need to login on the ssh-machine>"
ssh_serv="<remote password I need to login on the ssh-machine>"
ssh_port=<ssh-port>
当如下设置环境变量 http_proxy 和 https_proxy 时,像 wget 这样的工具可以正常工作(在远程服务器上,还安装了 web_server):
$ export env http_proxy="http://$proxy_user:$proxy_pass@$proxy_serv:$proxy_port"
$ wget $ssh_serv
Connecting to <proxy_serv>... connected.
Proxy request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html’
但使用 ssh 则不起作用:
$ ssh $ssh_user@$ssh_server:$ssh_port
ssh: Could not resolve hostname <ssh_server>:<ssh_port> Temporary failure in name resolution
在谷歌上搜索了一番后,我发现 ssh 需要“ProxyCommand”。这里不再推荐使用“nc”;应使用“ssh -W”。但我找不到需要身份验证的示例。我尝试过:
ssh -o "ProxyCommand='ssh -W %h:%p $proxy_user:$proxy_pass@$proxy_serv:$proxy_port'" $ssh_user@$ssh_serv:$ssh_port
我想我在某个地方遗漏了一些东西,但找不到好的提示(无论是在手册中,还是在谷歌上)。
我希望你们中的一些人可以帮助我。
答案1
现在,经过几个小时的谷歌搜索,我终于在“开瓶器”的帮助下让它为我工作。我的 ssh 服务器当前在端口 443 上运行(尚未尝试,是否也可以在 22 端口上运行)。
〜/ .ssh /配置
Host <my.ssh.server>
ProxyCommand corkscrew <my.companies.proxy> <proxy.port> %h %p ~/corkscrew-auth
~/.corkscrew-auth
<proxies.username>:<proxies.password>
现在我可以通过以下方式连接到我的服务器:
ssh <remote.user>@<my.ssh.server> -p 443
答案2
只是为了测试 - 你考虑过使用nc
吗?当我尝试使代理命令起作用时,我通常在配置级别执行此操作:/root/.ssh/config
例如,配置将具有以下内容:
Host ssh.example.com
ProxyCommand ssh [email protected] nc %h %p
这就是说,每当您连接到 ssh.example.com 时,它将使用下面的 ProxyCommand。我建议尝试一下,如果您绝对不能使用 netcat 实用程序,我相信我们可以想出一个解决方法。
答案3
这是我的解决方案:
首先安装这个 Debian/Ubuntu/Mint 软件包:
apt-get install connect-proxy
如果您在带有身份验证的代理后面工作,请导出凭据:
导出 HTTP_PROXY_USER=<用户> 导出 HTTP_PROXY_PASSWORD=<密码>
访问 ssh 配置文件/etc/ssh/ssh_config
并设置远程主机端口:
Port 443
设置服务器活动间隔以避免连接丢失:
ServerAliveInterval 20
将 ProxyCommand 设置为使用最近安装的连接包:
ProxyCommand 连接 -H<代理>:<端口>%生命值
关闭 ssh 配置文件,然后就可以执行 ssh 连接了:
ssh -N -D 本地主机:1080<远程用户>@<远程主机>
打开 Firefox,将网络设置配置为仅使用 Socket 5:
主机:localhost
端口:1080
启用也Proxy DNS when using SOCKS v5
。
最后,在 Firefox 搜索选项卡中输入以下内容:
about:config
查找network.proxy.allow_hijacking_localhost
并设置为true
.
现在您已准备好在代理后面连接并使用 Firefox 探索创建的隧道后面。