Sejauh yang saya tahu, ini adalah bug di WSL. Semoga Microsoft akan memperbaikinya di build berikutnya. Tapi untuk sekarang, kita bisa menggunakan hack yang sedikit jelek ini.
Pembaruan # 1 : Pasti bug. Menemukan masalah ini di Github. Solusi yang diusulkan mereka meluncurkan kembali shell bekerja untuk saya juga jika Anda tidak ingin melalui semua ini.
TL; DR Tambahkan ini ke AKHIR konfigurasi SSH Anda (biasanya berlokasi di ~/.ssh/config
):
Host *
ProxyCommand nc %h %p %r
Inilah mengapa ini bekerja: Masalah SSH kami bukan masalah firewall karena nc
dan telnet
bekerja untuk host dan port yang sama (coba telnet <host> <port>
atau nc <host> <port>
: Anda akan melihat sesuatu seperti SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.7
). Ini bisa kita gunakan untuk keuntungan kita.
SSH memungkinkan penggunaan proxy yang mengambil input standar dan mengirimkannya ke port server melalui ProxyCommand
opsi. Ini biasanya digunakan untuk tunnel ke jaringan ke host yang dilindungi dengan menggunakan server SSH bastion di antara, kadang-kadang disebut host melompat (lihat tautan ini untuk info lebih lanjut).
Peretasan ini memberi tahu SSH untuk menggunakan proxy tanpa host lompat. Jadi, ini mengatasi kegagalan alokasi sumber daya TCP oleh SSH dengan mendorong semua alokasi sumber daya jaringan ke Netcat, yang berfungsi. SSH hanya melakukan hal SSH tanpa koneksi jaringan, dan Netcat mengirimkan data mentah melalui koneksi TCP ke server SSH.
PERINGATAN: Karena ini memodifikasi ProxyCommand
untuk semua host, saya tidak tahu bagaimana berinteraksi dengan host konfigurasi SSH lain yang menggunakan ProxyCommand
. Saya memiliki beberapa server yang dapat digunakan untuk menguji ini, dan saya akan memperbarui jawaban ini dengan hasilnya. Ada kemungkinan tidak ada efek samping yang merugikan, tetapi saya tidak bisa menjamin itu.
Pembaruan # 2: Saya melakukan beberapa pengujian dengan beberapa server saya, dan ini tampaknya berhasil. SSH menggunakan entri paling atas dalam konfigurasi ketika beberapa entri berlaku. Jadi, ProxyCommand
hadiah yang ada di atas peretasan ini akan menimpanya. Ketika perintah SSH baru dieksekusi, ia membaca kembali konfigurasi SSH, dan jika tidak ada yang lain ProxyCommand
, SSH menggunakan peretasan kami ProxyCommand
, yang memungkinkannya hanya berlaku untuk sesi SSH "terluar". Kata peringatan: jika Anda meletakkan retasan di bagian atas file konfigurasi (atau di atas entri yang Anda coba SSH), sesi SSH yang memerlukan ProxyCommand
wasiat akan mengabaikan yang lain ProxyCommand
dan alih-alih mencoba menyelesaikan alamat host dan terhubung langsung dengan Netcat.