ฉันจะ SSH เป็น“ Bash บน Ubuntu บน Windows 10” ได้อย่างไร?


99

ฉันติดตั้ง Windows 10 Anniversary Edition ด้วย "Bash บน Ubuntu บน Windows" แล้ว ฉันต้องการที่จะสามารถ SSH ลงในอินสแตนซ์ของ Ubuntu นี้ แต่ถึงแม้ว่าฉันได้ติดตั้งและกำหนดค่า openssh-server (และกำลังฟังพอร์ต 2200) เมื่อฉันลอง ssh ไปที่ "localhost: 2200" มันจะบอกฉัน "เซิร์ฟเวอร์โดยไม่คาดคิด การเชื่อมต่อเครือข่ายปิด ".

มีใครสามารถที่จะประสบความสำเร็จในการทำเช่นนี้?

ป้อนคำอธิบายรูปภาพที่นี่


ใช้ Process Hacker และดูที่แท็บ 'เครือข่าย' มันจะแสดง sshd (ทำงานบน Ubuntu บน Windows 10) กำลังฟังบนพอร์ตในเครื่อง 2200
มิก

และถ้าคุณพยายามที่จะเชื่อมต่อกับที่อยู่ IP ของระบบ? Ubuntu มักจะทำแผนที่ที่อยู่ลูปแบ็คแตกต่างจากที่ทำกับ windows และใช้ค่าเพิ่มเติมใน 127.0.0.0/8 (มักเป็น 127.0.1.1)
Frank Thomas

@ แรมฮาวด์: ไม่จริง Localhost เป็น localhost และทุกอย่างถูกแชร์ คุณสามารถทำได้อย่างสมบูรณ์แบบlinks http://localhost/จากระบบย่อยของ Linux และดูเว็บเพจที่ IIS จัดไว้ให้ใน Windows ไม่มีการแยก
Sami Kuhmonen

คำตอบ:


120

ฉันได้มันไปทำงาน นี่คือวิธี

ถอนการติดตั้ง ssh-server ติดตั้งใหม่และทำให้แน่ใจว่ามันเริ่มต้นด้วย

sudo service ssh --full-restart

ตรวจสอบให้แน่ใจว่าคุณปิดการเข้าถึงรูทและเพิ่มผู้ใช้รายอื่นในไฟล์ปรับแต่ง

ฉันสามารถเชื่อมต่อกับระบบย่อยบน 127.0.0.1:22 ตามที่คาดไว้ ฉันหวังว่านี่จะช่วยคุณได้

นี่คือภาพหน้าจอ

  1. sudo apt-get purge openssh-server
  2. sudo apt-get install openssh-server
  3. sudo nano /etc/ssh/sshd_config และไม่อนุญาตให้ล็อกอินรูทโดยการตั้งค่า PermitRootLogin no
  4. จากนั้นเพิ่มบรรทัดข้างล่างที่ระบุว่า:

    AllowUsers yourusername

    และตรวจสอบให้แน่ใจว่าPasswordAuthenticationได้ตั้งไว้yesหากคุณต้องการเข้าสู่ระบบโดยใช้รหัสผ่าน

  5. ปิดใช้งานการแยกสิทธิ์โดยการเพิ่ม / แก้ไข: UsePrivilegeSeparation no

  6. sudo service ssh --full-restart

  7. เชื่อมต่อกับระบบย่อย Linux ของคุณจาก Windows โดยใช้ไคลเอ็นต์ ssh เช่น PuTTY


2
ฉันไม่จำเป็นต้องทำอย่างนั้น - แปลก .. แต่จำไว้ว่ามันยังอยู่ในช่วงเบต้าดังนั้นผลลัพธ์อาจแตกต่างกันไป
Master Azazel

7
นอกจากนี้ฉันต้อง: หยุด / ปิดการใช้งานบริการนายหน้าเซิร์ฟเวอร์ SSH ของ Windows 10 จากแผงควบคุมบริการและตั้งค่า: PubkeyAuthentication no ใน sshdconfig
math0ne

6
ฉันยังต้องการเพิ่มกฎไฟร์วอลล์ มีกฎที่มีอยู่ แต่นั่นเป็นเพียงสำหรับ Windows SSH Server Proxy และเมื่อฉันหยุดให้บริการไฟร์วอลล์จะบล็อกปริมาณการใช้งานพอร์ต 22
Pierre-Luc Paour

2
ฉันยังมีการเปลี่ยนพอร์ต ( Port 2222ใน/etc/ssh/sshd_configไฟล์) ถ้าไม่เซิร์ฟเวอร์ SSH ของหน้าต่างหยิบขึ้นมาเชื่อมต่อในพอร์ต 22
Arod

2
@ArtemRussakovskii พวกเขาหยุดระบบย่อย Linux ทั้งหมดเมื่อใดก็ตามที่คุณปิดหน้าต่างทุบตี ...
Sakher

27

เนื่องจาก windows implementation ไม่มี chroot คุณจำเป็นต้องแก้ไข / etc / ssh / sshd_config

UsePrivilegeSeparation no

นอกจากนี้คุณจะต้องสร้างผู้ใช้โดยใช้คำสั่ง useradd หรือมากกว่านั้น


4
ขั้นตอนนี้เป็นสิ่งสำคัญในการทำให้มันทำงาน
มิก

1
ฉันอยากรู้อยากเห็นดังนั้นฉันพบสิ่งนี้ได้ที่freebsd.org/cgi/man.cgi?sshd_config(5) : UsePrivilegeSeparation:
krs013

ระบุว่า sshd (8) แยกสิทธิพิเศษโดยสร้างกระบวนการลูกที่ไม่ได้รับสิทธิพิเศษเพื่อจัดการกับทราฟฟิกเครือข่ายที่เข้ามาหรือไม่ หลังจากการรับรองความถูกต้องที่ประสบความสำเร็จกระบวนการอื่นจะถูกสร้างขึ้นที่มีสิทธิ์ของผู้ใช้รับรองความถูกต้อง เป้าหมายของการแยกสิทธิพิเศษคือการป้องกันไม่ให้มีการเพิ่มระดับสิทธิ์โดยมีการคอร์รัปชั่นภายในกระบวนการที่ไม่ได้รับสิทธิพิเศษ อาร์กิวเมนต์ต้องเป็น "ใช่", "ไม่" หรือ "แซนด์บ็อกซ์" ถ้า UsePrivilegeSeparation ถูกตั้งค่าเป็น "sandbox" ดังนั้นกระบวนการที่ไม่มีการตรวจสอบสิทธิ์ล่วงหน้าจะต้องมีข้อ จำกัด เพิ่มเติม ค่าเริ่มต้นคือ "sandbox"
krs013


24

คำตอบของคณะกรรมการด้านบนนั้นยอดเยี่ยมมาก ขอบคุณสำหรับพวกเขา และในขณะที่พวกเขาเข้ามาใกล้สุดฉันยังคงมีปัญหาการเชื่อมต่อถูกปิดด้วยปัญหา127.0.0.1

ฉันพบและเพิ่มขั้นตอนเพิ่มเติมจากโพสต์นี้ซึ่งทำให้ฉันรู้สึกดี โดยเฉพาะอย่างยิ่งการเริ่มต้นและเพิ่มสิ่งนี้เป็นขั้นตอนเริ่มต้น / แรก (สังเกตเห็นตัวระบุ --purge ) ในที่สุดก็สามารถแก้ไขปัญหานี้ของฉันที่เปลี่ยนแปลง:

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

ขอขอบคุณอีกครั้งฉันหวังว่าการเพิ่มนี้จะช่วยผู้อื่น = :)


2
ทำไมต้องลงคะแนน คำแนะนำเหล่านี้เพียงอย่างเดียวไม่สามารถใช้งานได้ในกรณีของฉันดังที่กล่าวไว้และขั้นตอนเพิ่มเติมข้างต้นใช้งานได้ ฉันไม่เข้าใจ
NYCeyes

1
ฉันมีข้อผิดพลาดที่แตกต่างกันมาก "ไม่มีวิธีการตรวจสอบสิทธิ์ที่รองรับ (เซิร์ฟเวอร์ส่ง: publickey)" และขั้นตอนเหล่านี้แก้ไขได้
Mike Viens

2
ด้วยเหตุผลบางอย่าง Windows ก็ไม่ได้ชื่นชมที่ฉันทำงานบนพอร์ต 2222 มันไม่เคยแสดงกระบวนการอื่นใดที่ใช้มันและไม่มีหลักฐานว่ามีความขัดแย้งของพอร์ต แต่ทันทีที่ฉันเปลี่ยนพอร์ตมันก็เริ่ม งาน.
forresthopkinsa

พอร์ต 2222 ไม่ทำงานสำหรับฉันเช่นกันไม่มีบริการอื่นที่ทำงานอยู่ แต่ทำงานได้ 22 ข้อซึ่งเป็นปัญหาเนื่องจากฉันต้องการเชื่อมต่อ SSH หลายตัว
mFeinstein

4

ฉันทำทุกอย่างตามที่อาจารย์ Azazel แนะนำและมีปัญหา เมื่อฉันเชื่อมต่อกับพอร์ต22ฉันถูกขอรหัสผ่าน แต่รหัสผ่านที่ฉันตั้งในระบบย่อย Linux ไม่ทำงาน

โซลูชัน # 1:
เปลี่ยนพอร์ต SSH ใน/etc/ssh/sshd_configและรีสตาร์ทเซิร์ฟเวอร์ SSH ในระบบย่อย

โซลูชัน # 2:
ปิดใช้งาน / หยุด "บริการนายหน้าเซิร์ฟเวอร์ SSH" ในแผงควบคุมบริการของ Windows และรีสตาร์ทเซิร์ฟเวอร์ SSH ในระบบย่อย


1
สิ่งนี้ใช้ได้เฉพาะในกรณีที่คุณมีบางสิ่งบางอย่างทำงานบน windows บนพอร์ต 22
Master Azazel

3
แน่นอน, ตามที่คุณเห็นในการติดตั้งเริ่มต้นของฉันของ win10 มีบริการที่ทำงานในวันที่ 22 ...
scotty86

2

สาเหตุที่คุณไม่สามารถ ssh ปรากฏขึ้นในการบันทึกจากเซิร์ฟเวอร์:

chroot ("/ var / run / sshd"): ไม่ได้ใช้ฟังก์ชั่น [preauth]

ระบบย่อย Linux ดูเหมือนว่าจะไม่ได้ติดตั้ง chroot และเซิร์ฟเวอร์ ssh จำเป็นต้องใช้ดังนั้นการเชื่อมต่อไม่ได้รับอนุญาต


3
ซึ่งถูกต้อง .. แต่คำตอบอื่น ๆ อธิบายวิธีการแก้ไขข้อกำหนด chroot
Mahmoud Al-Qudsi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.