Bagaimana saya bisa SSH menjadi "Bash di Ubuntu pada Windows 10"?

99

Saya memiliki Windows 10 Anniversary Edition dengan "Bash on Ubuntu on Windows" diinstal dan berfungsi. Saya ingin dapat SSH menjadi contoh Ubuntu ini, tetapi meskipun saya telah menginstal dan mengkonfigurasi openssh-server (dan mendengarkan pada port 2200), ketika saya mencoba untuk ssh ke "localhost: 2200", ia memberitahu saya "Server tiba-tiba koneksi jaringan tertutup ".

Adakah yang berhasil melakukan ini?

masukkan deskripsi gambar di sini

Mick
sumber
Menggunakan Process Hacker dan melihat tab 'Network', ini menunjukkan sshd (berjalan pada Ubuntu pada Windows 10) mendengarkan pada 2200 port lokal.
Mick
dan jika Anda mencoba untuk terhubung ke alamat ip sistem? Ubuntu sering memetakan alamat loopback secara berbeda dari windows, dan menggunakan nilai tambahan di 127.0.0.0/8 (sering 127.0.1.1)
Frank Thomas
@Ramhound: Tidak benar. Localhost adalah localhost dan semuanya dibagikan. Anda dapat melakukannya dengan baik links http://localhost/dari subsistem Linux dan melihat halaman web yang disediakan oleh IIS di sisi Windows. Tidak ada pemisahan.
Sami Kuhmonen

Jawaban:

120

Saya berhasil; begini caranya.

Copot server ssh, instal ulang dan pastikan sudah dimulai

sudo service ssh --full-restart

Pastikan Anda mematikan akses root dan menambahkan pengguna lain di file konfigurasi.

Saya dapat terhubung ke subsistem pada 127.0.0.1:22 seperti yang diharapkan. Saya harap ini akan membantu Anda.

Ini screenshotnya.

  1. sudo apt-get purge openssh-server
  2. sudo apt-get install openssh-server
  3. sudo nano /etc/ssh/sshd_config dan melarang login root dengan pengaturan PermitRootLogin no
  4. Kemudian tambahkan baris di bawahnya yang bertuliskan:

    AllowUsers yourusername

    dan pastikan PasswordAuthenticationdiatur ke yesjika Anda ingin login menggunakan kata sandi.

  5. Nonaktifkan pemisahan hak istimewa dengan menambahkan / memodifikasi: UsePrivilegeSeparation no

  6. sudo service ssh --full-restart

  7. Sambungkan ke subsistem Linux Anda dari Windows menggunakan klien ssh seperti Putty.

Tuan Azazel
sumber
2
saya tidak perlu melakukan itu - aneh .. tapi ingat ini masih dalam tahap beta sehingga hasilnya dapat bervariasi
Master Azazel
7
Selain itu saya harus: Stop / Nonaktifkan Windows 10 SSH Server Broker Services dari panel kontrol layanan dan set: PubkeyAuthentication no di sshdconfig
math0ne
6
Saya juga perlu menambahkan aturan firewall. Ada aturan yang ada, tapi itu hanya untuk Windows SSH Server Proxy, dan ketika saya menghentikan layanan itu, firewall memblokir lalu lintas di port 22.
Pierre-Luc Paour
2
Saya juga harus mengubah port ( Port 2222dalam /etc/ssh/sshd_configfile), jika bukan server ssh windows mengambil koneksi pada port 22.
arod
2
@ArtemRussakovskii mereka menghentikan seluruh subsistem Linux setiap kali Anda menutup jendela bash ...
Sakher
27

Karena implementasi windows tidak menyediakan chroot, Anda perlu memodifikasi / etc / ssh / sshd_config

UsePrivilegeSeparation no

Anda juga perlu membuat pengguna menggunakan perintah useradd atau lebih.

d1val
sumber
4
Langkah ini penting untuk membuatnya bekerja.
Mick
1
Saya penasaran, jadi saya menemukan ini di freebsd.org/cgi/man.cgi?sshd_config(5) : UsePrivilegeSeparation:
krs013
Menentukan apakah sshd (8) memisahkan hak istimewa dengan membuat proses anak yang tidak terjangkau untuk menangani lalu lintas jaringan yang masuk. Setelah otentikasi berhasil, proses lain akan dibuat yang memiliki hak istimewa dari pengguna yang diautentikasi. Tujuan dari pemisahan hak istimewa adalah untuk mencegah eskalasi hak istimewa dengan memuat segala korupsi dalam proses yang tidak terjangkau. Argumennya harus "ya", "tidak", atau "kotak pasir". Jika UsePrivilegeSeparation diatur ke "kotak pasir" maka proses unprivileged pra-otentikasi dikenakan pembatasan tambahan. Standarnya adalah "kotak pasir".
krs013
7
WSL menerapkan chroot pada September 2016 (setelah jawaban ini).
GreenReaper
24

Jawaban panitia di atas sangat bagus. Terima kasih untuk mereka Dan ketika mereka datang sangat dekat, saya masih punya masalah Koneksi ditutup oleh 127.0.0.1 .

Saya menemukan dan menambahkan langkah-langkah tambahan dari posting ini yang membuat saya mengatasi punuk. Secara khusus, memulai kembali dan menambahkan ini sebagai langkah awal / pertama (perhatikan kualifikasi --purge ), akhirnya menyelesaikan variasi saya tentang masalah ini:

sudo apt-get remove --purge openssh-server
sudo apt-get install openssh-server
sudo vi /etc/ssh/sshd_config # Change Port from 22 to 2222 (Just in case MS-Windows is using port 22; which, by the way, SSH on MS-Windows can be disabled if you want to use port 22).
sudo service ssh --full-restart

Terima kasih sekali lagi, saya berharap penambahan ini membantu orang lain. = :)

NYCeyes
sumber
2
Mengapa downvote? Instruksi ini saja tidak berfungsi dalam kasus saya, seperti yang disebutkan, dan langkah tambahan di atas berhasil. Saya tidak mengerti.
NYCeyes
1
Saya mengalami kesalahan yang sangat berbeda "Tidak ada metode autentikasi yang didukung tersedia (server mengirim: publickey)" dan langkah-langkah ini memperbaikinya.
Mike Viens
2
Untuk beberapa alasan, Windows hanya tidak menghargai bahwa saya sedang berjalan di Port 2222. Tidak pernah menunjukkan proses lain menggunakannya, dan tidak ada bukti konflik port, tetapi segera setelah saya mengubah port, ia mulai kerja.
forresthopkinsa
Port 2222 juga tidak berfungsi untuk saya, tidak ada layanan lain yang berjalan, tetapi 22 berfungsi, yang merupakan masalah karena saya ingin memiliki beberapa koneksi SSH.
mFeinstein
4

Saya melakukan segalanya seperti yang disarankan Azazel dan memiliki masalah. Ketika saya terhubung ke port, 22saya diminta kata sandi, tetapi kata sandi yang saya atur di subsistem Linux tidak berfungsi.

Solusi # 1:
ubah port SSH /etc/ssh/sshd_configdan restart server SSH di subsistem

Solusi # 2:
nonaktifkan / hentikan "Layanan Broker SSH Server" di panel kontrol layanan Windows dan mulai ulang server SSH di subsistem.

scotty86
sumber
1
Ini hanya berlaku jika Anda memiliki sesuatu yang berjalan di windows pada port 22.
Master Azazel
3
Ofcz, seperti yang Anda lihat pada instalasi default saya win10 ada layanan yang berjalan pada 22 ...
scotty86
2

Alasan mengapa Anda tidak dapat melakukannya ditampilkan di log dari server:

chroot ("/ var / run / sshd"): Fungsi tidak diimplementasikan [preauth]

Subsistem Linux sepertinya tidak memiliki chroot yang diimplementasikan dan server ssh membutuhkannya sehingga koneksi tidak diperbolehkan.

Sami Kuhmonen
sumber
3
Mana yang benar .. tetapi jawaban lain menjelaskan cara bekerja di sekitar persyaratan chroot.
Mahmoud Al-Qudsi