ทรัพยากรไคลเอ็นต์ SSH ระบบย่อย Windows 10 Linux ไม่สามารถใช้งานได้ชั่วคราว


25

ฉันพยายามที่จะ ssh ลงในเซิร์ฟเวอร์ระยะไกลของฉันภายในระบบย่อย Linux 10 ของ Windows ฉันใช้ MS Windows 10 Home Insider Preview build 14366

ขณะที่พรอมต์คำสั่งฉันพิมพ์:

ssh user@domain.com

ไม่กี่วินาทีหลังจากพิมพ์คำสั่ง ssh ฉันได้รับข้อความต่อไปนี้:

ssh: เชื่อมต่อกับโฮสต์ domain.com พอร์ต 22: ทรัพยากรไม่สามารถใช้งานได้ชั่วคราว

ฉันสามารถเชื่อมต่อโดยใช้ Putty ได้สำเร็จและใช้ ssh ภายใน Git Bash

ดังนั้นสิ่งนี้ทำให้ฉันเชื่อว่าปัญหานี้เกิดขึ้นในพีซีของฉันและเฉพาะเจาะจงมากขึ้นในระบบย่อยของ Linux ฉันยังคงเป็นมิตรกับสิ่งแวดล้อมของ Linux และไม่แน่ใจว่าจะตีความข้อความนี้อย่างไร ทรัพยากรใดไม่พร้อมใช้งานและฉันควรทำอย่างไรเพื่อให้พร้อมใช้งาน


ก่อนอื่นเดา: ไฟร์วอลล์ Windows? ps> และยินดีต้อนรับสู่ superuser :) Google ดูเหมือนจะเกี่ยวข้องกับ fork แทน โปรดแก้ไขโพสต์และเพิ่มบรรทัดคำสั่งที่ให้ข้อผิดพลาดนี้กับคุณ
Hastur


เพียงตรวจสอบว่าคุณใช้โครงสร้างตัวอย่างของ Insider ของ Windows 10 เพราะ AFAIK ระบบย่อย Linux มีเฉพาะในรุ่นนี้ไม่ใช่ใน 'ปกติ' Windows 10 มิฉะนั้นคุณจะใช้ Cygwin หรือไม่
gogoud

@ggoud - ฉันได้อัพเดทคำถามเพื่อรวมระบบปฏิบัติการ มันเป็นงานสร้างตัวอย่างภายใน
kell

2
ฉันยังมีปัญหานี้ มันมีผลกับโปรแกรมทั้งหมดที่สนับสนุนโดย ssh เช่นgitและapt-get
scicalculator

คำตอบ:


10

เท่าที่ฉันสามารถบอกได้นี่เป็นข้อผิดพลาดใน WSL หวังว่า Microsoft จะแก้ไขในรุ่นต่อไป แต่สำหรับตอนนี้เราสามารถใช้แฮ็คที่น่าเกลียดนี้ได้เล็กน้อย

อัปเดต # 1 : ข้อบกพร่องอย่างแน่นอน พบปัญหานี้ใน Github พวกเขาเสนอวิธีแก้ปัญหาของการเปิดใช้งานเชลล์อีกครั้งสำหรับฉันเช่นกันหากคุณไม่ต้องการทำสิ่งนี้ทั้งหมด

TL; DR เพิ่มส่วนนี้เพื่อสิ้นสุดการกำหนดค่า SSH ของคุณ (โดยปกติจะอยู่ที่~/.ssh/config):

Host *
    ProxyCommand nc %h %p %r

นี่คือสาเหตุที่ใช้งานได้: ปัญหา SSH ของเราไม่ใช่ปัญหาไฟร์วอลล์เพราะncและtelnetทำงานกับโฮสต์และพอร์ตเดียวกัน (ลองtelnet <host> <port>หรือnc <host> <port>: คุณควรเห็นบางสิ่งSSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.7) สิ่งนี้เราสามารถใช้เพื่อประโยชน์ของเรา

SSH อนุญาตให้ใช้พร็อกซีที่รับอินพุตมาตรฐานและส่งไปยังพอร์ตของเซิร์ฟเวอร์ผ่านProxyCommandตัวเลือก โดยปกติจะใช้ช่องสัญญาณไปยังเครือข่ายไปยังโฮสต์ที่ได้รับการป้องกันโดยใช้เซิร์ฟเวอร์ SSH ระหว่างป้อมปราการบางครั้งเรียกว่ากระโดดโฮสต์ (ดูลิงก์นี้สำหรับข้อมูลเพิ่มเติม)

แฮ็คนี้บอกให้ SSH ใช้พรอกซีที่ไม่มีโฮสต์ข้าม ดังนั้นจึงได้รับการจัดสรรทรัพยากร TCP ที่ล้มเหลวของ SSH โดยการผลักดันการจัดสรรทรัพยากรเครือข่ายทั้งหมดไปยัง Netcat ซึ่งทำงานได้ SSH ทำสิ่ง SSH โดยไม่มีการเชื่อมต่อเครือข่ายและ Netcat ส่งข้อมูลดิบผ่านการเชื่อมต่อ TCP ไปยังเซิร์ฟเวอร์ SSH

คำเตือน: เนื่องจากสิ่งนี้จะปรับเปลี่ยนProxyCommandสำหรับโฮสต์ทั้งหมดฉันไม่ทราบว่ามันโต้ตอบกับโฮสต์การกำหนดค่า SSH อื่น ๆ ที่ใช้ProxyCommandอย่างไร ฉันมีเซิร์ฟเวอร์ไม่กี่แห่งที่ฉันสามารถทดสอบได้และฉันจะอัปเดตคำตอบนี้พร้อมผลลัพธ์ มีโอกาสที่ไม่มีผลข้างเคียงที่เป็นอันตราย แต่ฉันไม่สามารถรับประกันได้ว่า

อัปเดต # 2:ฉันทำการทดสอบกับเซิร์ฟเวอร์ของฉันสองสามตัวและนี่ก็ใช้งานได้ SSH ใช้รายการบนสุดในการกำหนดค่าเมื่อใช้หลายรายการ ดังนั้นProxyCommandปัจจุบันที่มีอยู่เหนือแฮ็คนี้จะแทนที่มัน เมื่อคำสั่ง SSH ใหม่ถูกดำเนินการคำสั่งจะอ่านการกำหนดค่า SSH อีกครั้งและหากไม่มีอื่นProxyCommandSSH จะใช้การแฮ็กของเราProxyCommandอนุญาตให้ใช้กับเซสชัน SSH "นอกสุด" เท่านั้น คำเตือน: ถ้าคุณใส่แฮ็คที่ด้านบนของไฟล์ปรับแต่ง (หรือเหนือรายการที่คุณพยายามที่จะ SSH ไป), เซสชัน SSH ที่ต้องการProxyCommandจะไม่สนใจคนอื่นProxyCommandและพยายามที่จะแก้ไขที่อยู่ของโฮสต์และเชื่อมต่อแทน โดยตรงกับ Netcat


ขอบคุณสำหรับรายละเอียด @ computergeek125 น่าเสียดายที่แม้หลังจากตั้งค่าคอนฟิกตามที่แนะนำแล้วฉันยังคงได้รับข้อความเดิม ssh: เชื่อมต่อกับโฮสต์ domain.com พอร์ต 22: ทรัพยากรไม่สามารถใช้งานได้ชั่วคราวเมื่อฉันรัน nc -v <host> <port> สำหรับเอาต์พุตแบบ verbose ฉันจะได้รับ ข้อผิดพลาดเดียวกัน: ทรัพยากรไม่สามารถใช้งานได้ชั่วคราว ฉันอาจจะทำสิ่งผิดปกติไม่แน่ใจ เนื่องจากฉันไม่มีปัญหาเกี่ยวกับ ssh โดยใช้ Gash bash shell ฉันจะใช้มันในตอนนี้ BTW ระบบของฉันตอนนี้อยู่ที่ 14,393 สร้างดังนั้นหากนี่เป็นข้อผิดพลาดในรุ่นในช่วงเวลาของคำถามก็ยังคงเป็นข้อบกพร่องที่ 27 สร้างในภายหลัง
kell

นั่นเป็นเรื่องที่น่าสนใจ ฉันจะต้องทำการวิจัยเกี่ยวกับโครงสร้างนั้น ฉันวิ่งไป 14903 ในขณะนั้น (ตอนนี้ฉันสูงถึง 14905) อาจเป็นสิ่งที่พวกเขาแก้ไขในงานสร้างที่ฉันมี
computergeek125

ฉันจะแก้ไขการกำหนดค่า SSH ได้อย่างไร ใน bash สำหรับ windows console ฉันพยายามvi ~/.ssh/configที่เปิดไฟล์เปล่า ฉันวางคำสั่งของคุณ แต่เมื่อฉันพยายามบันทึก (esc ->: -> wq) มันจะบอกฉัน"~/.ssh/config" E212: Cannot open file for writing
Dan

ตกลงที่แปลก คุณกำลังใช้ Windows รุ่นใดและมีเอาท์พุตls -al ~/.sshอะไรบ้าง
computergeek125

3

นี่เป็นปัญหาสำหรับฉันเช่นกันกลายเป็นว่าไฟร์วอลล์ (Symantec) ของฉันปิดกั้นการรับส่งข้อมูลอินเทอร์เน็ตทั้งหมดจากการทุบตี

ดูเหมือนว่าเป็นปัญหาทั่วไปกับผู้ให้บริการไฟร์วอลล์ของบุคคลที่สามซึ่งไม่รู้จักกระบวนการดังกล่าว:

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

เมื่อฉันปิดไฟร์วอลล์มันใช้งานได้ดี ไม่พบวิธีแก้ปัญหาที่ดีกว่าในขณะนี้


0

ในกรณีของผมผมได้รับข้อผิดพลาดนี้เพราะ Windows Update ก่อให้เกิดปัญหากับสวิตช์ Hyper-V ของฉัน ปรากฎโฮสต์ที่ฉันพยายามจะ ssh เชื่อมต่อกับสวิตช์นั้น - แก้ไขการเรียกคืน ssh


0

สำหรับการอ้างอิงในอนาคตเมื่อคุณติดตั้ง Nginx มันจะบล็อก SSH โดยค่าเริ่มต้นพร้อมกับข้อความข้อผิดพลาด "ทรัพยากรไม่พร้อมใช้งานชั่วคราว" เว้นแต่คุณ ...

sudo ufw อนุญาต ssh


Windows 10 เองมีไฟร์วอลล์ ทำไมคุณถึงแนะนำเช่นนั้น?
Biswapriyo

ฉันแนะนำว่าสำหรับผู้ใช้ในอนาคตที่มีปัญหาเดียวกันเพราะฉันมีปัญหาเดียวกันแน่นอนและเป็นเพราะ Nginx บล็อก SSH ไปยังเซิร์ฟเวอร์
andrerpena
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.