web-dev-qa-db-ja.com

プロキシを必要とする認証による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

私はどこかで何かが足りないのだと思いますが、(マニュアルでもグーグルでも)良いヒントを見つけることができませんでした。

あなた方の何人かが私を助けてくれることを願っています。前もって感謝します

2
Tom Mekken

グーグルで何時間も過ごした後、「コルク栓抜き」の助けを借りて、ようやく機能しました。私の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
0
Tom Mekken

テストのためだけに-とにかくncの使用を検討しましたか?プロキシコマンドを機能させようとすると、通常は構成レベルで機能していました:/root/.ssh/config

たとえば、構成には次のようになります。

Host ssh.example.com
    ProxyCommand ssh [email protected] nc %h %p

これは、ssh.example.comに接続するたびに、以下のProxyCommandを使用することを示しています。私はそれを試してみることをお勧めします、もしあなたが絶対にnetcatユーティリティを使うことができないなら、私は回避策を考えることができると確信しています。

0
Kahn