在工作中,我们当然有公司的代理。我需要通过 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
我想我在某处遗漏了一些东西,但找不到好的提示(无论是在手册中,还是在谷歌上)。
我希望你们中的一些人可以帮助我。
现在经过几个小时的谷歌搜索,我终于在“开瓶器”的帮助下让它为我工作了。我的 ssh-server 目前正在端口 443 上运行(还没有尝试过,是否也可以在 22 上运行)。
~/.ssh/config
~/.corkscrew-auth
现在我可以通过以下方式连接到我的服务器:
只是为了测试-您是否考虑过使用
nc
?当我尝试让代理命令工作时,我通常在配置级别这样做:/root/.ssh/config
例如,配置将具有以下内容:
这就是说,每当您连接到 ssh.example.com 时,它都会使用下面的 ProxyCommand。我建议试一试,如果您绝对不能使用 netcat 实用程序,我相信我们可以想到一个解决方法。
这是我的解决方案:
首先安装这个 Debian/Ubuntu/Mint 软件包:
如果您在代理后面使用身份验证,请导出凭据:
访问 ssh 配置文件
/etc/ssh/ssh_config
并设置远程主机端口:设置服务器活动间隔以避免连接丢失:
设置 ProxyCommand 以使用连接最近安装的包:
关闭 ssh 配置文件,然后您就可以执行 ssh 连接了:
打开 Firefox,将网络设置配置为仅使用 Socket 5:
主机:
localhost
端口:1080
也启用
Proxy DNS when using SOCKS v5
。最后,在 Firefox 搜索选项卡中,键入以下内容:
查找
network.proxy.allow_hijacking_localhost
并设置为true
.现在您已准备好在代理后面连接并使用 Firefox 在创建的隧道后面进行探索。