私が知る限り、これはWSLのバグです。うまくいけば、Microsoftは次のビルドでそれを修正するでしょう。しかし、今のところ、この少しいハックを使用できます。
アップデート#1:間違いなくバグ。この問題はGithubで発見されました。このすべてをやりたくない場合は、Thierがシェルの再起動の回避策を提案しました。
TL; DRこれを追加して、SSH構成を終了します(通常はにあります~/.ssh/config)。
Host *
ProxyCommand nc %h %p %r
それが動作する理由はここにあります:私たちのSSHの問題は、ファイアウォールの問題ではありませんncし、telnet仕事と同じホストとポート(しようとするtelnet <host> <port>かnc <host> <port>:あなたのようなものが表示されるはずですSSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.7)。これは私たちにとって有利に使用できます。
SSHでは、ProxyCommandオプションを使用して標準入力を取得し、サーバーのポートに送信するプロキシを使用できます。これは通常、ジャンプホストとも呼ばれる中間要塞SSHサーバーを使用して、保護されたホストへのネットワークへのトンネリングに使用されます(詳細については、このリンクを参照してください)。
このハックは、ジャンプホストなしでプロキシを使用するようSSHに指示します。したがって、すべてのネットワークリソース割り当てをNetcatにプッシュすることにより、SSHのTCPリソースの割り当ての失敗を回避できます。SSHはネットワーク接続なしでSSHを実行するだけで、NetcatはTCP接続を介して生データをSSHサーバーに送信します。
警告:これProxyCommandによりすべてのホストが変更されるため、を使用する他のSSH構成ホストとのやり取りがわかりませんProxyCommand。これをテストできるサーバーがいくつかあり、この回答を結果で更新します。有害な副作用がない可能性がありますが、それを保証することはできません。
更新#2:いくつかのサーバーでいくつかのテストを行いましたが、これはうまくいくようです。SSHは、複数のエントリが適用される場合、構成の最上位エントリを使用します。したがって、ProxyCommandこのハックの上に存在する存在はそれを上書きします。新しいSSHコマンドが実行されると、SSH設定が再読み込みされ、他ProxyCommandにSSH がない場合、SSHはハックを使用ProxyCommandして「最も外側の」SSHセッションにのみ適用できるようにします。警告:設定ファイルの上部(またはSSHしようとしているエントリの上)にハックを置くと、aを必要とするSSHセッションProxyCommandはもう一方を無視しProxyCommand、代わりにホストのアドレスを解決して接続しようとしますNetcatで直接。