Ssh

ssh 通過需要代理的身份驗證

  • July 12, 2018

在工作中,我們當然有公司的代理。我需要通過 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

Google搜尋了一下,我發現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

我想我在某處遺漏了一些東西,但找不到一個好的提示(無論是在手冊中,還是在Google上)。

我希望你們中的一些人可以幫助我。提前致謝

現在經過幾個小時的Google搜尋,我終於在“開瓶器”的幫助下讓它為我工作了。我的 ssh-server 目前正在埠 443 上執行(還沒有嘗試過,是否也可以在 22 上執行)。

~/.ssh/config

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

只是為了測試-您是否考慮過使用nc?當我嘗試讓代理命令工作時,我通常在配置級別這樣做:/root/.ssh/config

例如,配置將具有以下內容:

Host ssh.example.com
   ProxyCommand ssh root@proxy.example.com nc %h %p

這就是說,每當您連接到 ssh.example.com 時,它都會使用下面的 ProxyCommand。我建議試一試,如果您絕對不能使用 netcat 實用程序,我相信我們可以想到一個解決方法。

引用自:https://unix.stackexchange.com/questions/447780