職場にはもちろん会社の代理人がいます。会社のネットワーク外のマシンに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サーバーは現在ポート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 [email protected] nc %h %p
これは、ssh.example.comに接続するたびに、以下のProxyCommandを使用することを示しています。私はそれを試してみることをお勧めします、もしあなたが絶対にnetcatユーティリティを使うことができないなら、私は回避策を考えることができると確信しています。