Sumber Daya klien SSH Linux Subsistem Windows 10 untuk sementara tidak tersedia

25

Saya mencoba ssh ke server jauh saya di dalam Windows 10 Linux Subsystem. Saya menggunakan MS Windows 10 Home Insider Preview build 14366.

Saat berada di command prompt, saya mengetik:

ssh [email protected]

Beberapa detik setelah mengetik perintah ssh, saya mendapatkan pesan berikut:

ssh: terhubung ke host domain.com port 22: Sumber daya tidak tersedia untuk sementara

Saya berhasil dapat terhubung menggunakan Putty serta menggunakan ssh dalam Git Bash.

Jadi, itu membuat saya percaya bahwa masalahnya ada di komputer lokal saya dan lebih khusus di dalam Subsistem Linux. Saya masih sangat hijau dengan lingkungan Linux dan saya tidak yakin bagaimana menafsirkan pesan ini. Sumber daya apa yang tidak tersedia dan apa yang harus saya lakukan untuk membuatnya tersedia?

kell
sumber
Tebakan pertama: Windows Firewall? ps> dan selamat datang di superuser :) Google agaknya malah terkait dengan garpu. Harap edit posting dan tambahkan baris perintah yang memberi Anda kesalahan ini.
Hastur
terkait
Ramhound
hanya memeriksa bahwa Anda menggunakan build Insider Preview dari Windows 10 karena AFAIK subsistem Linux hanya tersedia dalam versi ini, bukan pada Windows 10 yang 'normal'. Jika tidak, mungkin Anda menggunakan Cygwin?
gogoud
@ggoud - Saya telah memperbarui pertanyaan untuk memasukkan sistem operasi. Itu memang membangun Pratinjau Orang Dalam.
kell
2
Saya juga mengalami masalah ini. Ini mempengaruhi semua program yang didukung oleh ssh seperti gitdanapt-get
scicalculator

Jawaban:

10

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 ncdan telnetbekerja 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 ProxyCommandopsi. 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 ProxyCommanduntuk 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, ProxyCommandhadiah 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 ProxyCommandwasiat akan mengabaikan yang lain ProxyCommanddan alih-alih mencoba menyelesaikan alamat host dan terhubung langsung dengan Netcat.

computergeek125
sumber
Terima kasih atas detailnya @ computergeek125. Sayangnya, bahkan setelah mengatur konfigurasi seperti yang disarankan, saya masih mendapatkan pesan yang sama ssh: terhubung ke host domain.com port 22: Sumber daya tidak tersedia untuk sementara ketika saya menjalankan nc -v <host> <port>, untuk keluaran verbose, saya mendapatkan kesalahan yang sama: Sumber daya tidak tersedia untuk sementara. Saya mungkin melakukan sesuatu yang salah, tidak yakin. Karena saya tidak memiliki masalah ssh menggunakan shell bash Git, saya akan tetap menggunakannya untuk saat ini. BTW, sistem saya sekarang di build 14393, jadi, jika ini adalah bug dalam versi pada saat pertanyaan, itu masih bug 27 membangun kemudian.
kell
Yah, itu menarik. Saya harus melakukan penelitian pada bangunan itu. Saya menjalankan 14903 pada saat itu (sekarang saya mencapai 14905). Mungkin itu sesuatu yang mereka perbaiki di build yang saya miliki.
computergeek125
Bagaimana cara saya mengedit konfigurasi SSH? Dalam bash untuk windows console saya mencoba vi ~/.ssh/configyang membuka file kosong. Saya menyisipkan perintah Anda tetapi ketika saya mencoba untuk menyimpan (esc ->: -> wq) ia memberi tahu saya"~/.ssh/config" E212: Cannot open file for writing
Dan
Ok itu aneh. Membangun Windows apa yang Anda jalankan, dan apa outputnya ls -al ~/.ssh?
computergeek125
3

Ini juga masalah bagi saya, ternyata itu adalah firewall saya (Symantec) yang memblokir semua lalu lintas internet dari bash.

Tampaknya ini adalah masalah umum dengan penyedia firewall pihak ke-3 yang tidak mengenali prosesnya:

https://github.com/Microsoft/BashOnWindows/issues/809

Ketika saya menonaktifkan firewall saya, itu berfungsi dengan baik. Tidak dapat menemukan solusi yang lebih baik saat ini.

Andrew Jones
sumber
0

Untuk referensi di masa mendatang, ketika Anda menginstal Nginx, itu akan memblokir SSH secara default dengan pesan kesalahan "Sumberdaya sementara tidak tersedia" kecuali jika Anda ...

sudo ufw izinkan ssh

andrerpena
sumber
Windows 10 sendiri memiliki firewall. Mengapa Anda menyarankan itu?
Biswapriyo
Saya menyarankan agar untuk pengguna masa depan dengan masalah yang sama karena saya memiliki masalah yang sama persis dan itu karena Nginx memblokir SSH ke server
andrerpena