私達の会社にかなり企業の代理店があります。会社のネットワーク外の一部のコンピュータに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
どこかで何か欠けているようですが(マニュアルやGoogleで)良いヒントが見つかりません。
あなたの一部が私を助けることを願っています。
答え1
これで、数時間のインターネット検索の最後に「オフナー」の助けを借りて、ついに機能するようになりました。私の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
答え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を開き、ソケット5のみを使用するようにネットワーク設定を構成します。
ホスト:localhost
ポート:1080
有効すぎますProxy DNS when using SOCKS v5
。
最後に、Firefoxの検索タブに次のように入力します。
about:config
を見つけてnetwork.proxy.allow_hijacking_localhost
設定しますtrue
。
これで、プロキシの背後に接続し、Firefoxを使用して作成されたトンネルの背後に移動する準備が整いました。