ssh 通过身份验证需要代理

ssh 通过身份验证需要代理

在工作中我们当然有公司的代理人。我需要通过 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 探索创建的隧道后面。

相关内容