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
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 實用程序,我相信我們可以想到一個解決方法。