私はWindows 10 Linux Subsystem内のリモートサーバーにSSHで接続しようとしています。 MS Windows 10 Home Insider Previewビルド14366を使用しています。
コマンドプロンプトで、私は入力します。
Sshコマンドを入力して数秒後、次のようなメッセージが表示されます。
ssh:ホストdomain.comに接続します。ポート22:リソースは一時的に利用不可です。
Git Bash内でsshを使用するだけでなく、PuTTYを使用しても正常に接続できます。
だから、それは私に問題が私の地元のパソコン、より具体的にはLinuxサブシステムの中にあると信じるように導きます。私はまだLinux環境に非常に不慣れであり、このメッセージの解釈方法がわからない。利用できないリソースと利用可能にするにはどうすればよいですか。
私が言うことができる限り、これはWSLのバグです。うまくいけば、マイクロソフトはそれを次のビルドで修正するでしょう。しかし今のところ、このちょっと醜いハックを使うことができます。
更新#1:間違いなくバグです。 Githubで この問題 を発見しました。シェルを再起動するという提案された回避策は、あなたがこれらすべてをやりたくないのであれば私にも同様に働きます。
TL; DRこれを追加してSSH設定を終了します(通常は~/.ssh/config
にあります)。
Host *
ProxyCommand nc %h %p %r
nc
とtelnet
は同じホストとポートで動作するため、SSHの問題はファイアウォールの問題ではありません(telnet <Host> <port>
またはnc <Host> <port>
を試してください:SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.7
のようなものが表示されます)。これは私達が私達の利点に使用することができます。
SSHでは、標準入力を受け取り、ProxyCommand
オプションを介してサーバーのポートに送信するプロキシを使用できます。これは通常、ジャンプホストとも呼ばれる中間要塞SSHサーバーを使用して保護されたホストにネットワークでトンネルするために使用されます(詳細については this link を参照)。
このハックはSSHにジャンプホストのないプロキシを使うように伝えます。そのため、すべてのネットワークリソース割り当てをNetcatにプッシュすることで、SSHで失敗したTCPリソースの割り当てを回避できます。 SSHはネットワークに接続せずにSSHを実行するだけで、Netcatは生データをTCP接続を介してSSHサーバーに送信します。
警告:これはすべてのホストのProxyCommand
を変更するので、ProxyCommand
を使う他のSSH設定ホストとどのようにやり取りするのかわかりません。これをテストできるサーバーがいくつかありますが、結果を使用してこの回答を更新します。有害な副作用がない可能性はありますが、それを保証することはできません。
アップデート#2:私はいくつかのサーバーでテストをしましたが、これでうまくいくようです。複数のエントリが適用される場合、SSHは設定内の最上位エントリを使用します。したがって、このハックの上に存在する既存のProxyCommand
はそれをオーバーライドするでしょう。新しいSSHコマンドが実行されると、それはSSH設定を再読み込みし、他にProxyCommand
がない場合、SSHは私たちのハックProxyCommand
を使用し、それが「最も外側の」SSHセッションにのみ適用されるようにします。警告の言葉:もしあなたが設定ファイルの一番上(あるいはSSHしようとしているエントリーの上)にハックを置くと、ProxyCommand
を必要とするSSHセッションは他のProxyCommand
を無視し、代わりにホストのアドレスを解決しようとしますNetcatに直接接続してください。
これは私にとっても問題でした、それは私の(シマンテック)ファイアウォールがbashからのすべてのインターネットトラフィックをブロックしていたことがわかった。
それはプロセスを認識していないサードパーティ製のファイアウォールプロバイダに関する一般的な問題のようです。
https://github.com/Microsoft/BashOnWindows/issues/809
ファイアウォールを無効にしてもうまくいきました。現時点でより良い解決策を見つけることができません。
今後の参考のために、Nginxをインストールすると、デフォルトでSSHが「リソースが一時的に利用できません」というエラーメッセージでブロックされます。
Sudo ufw sshを許可する
私の場合は、Windowsのアップデート によってHyper-Vスイッチ で問題が発生したため、このエラーが発生しました。 SSHで接続しようとしていたホストがそのスイッチに接続されていたことが判明しました - 修復してSSHを復元しました。