ข้อผิดพลาดในการสร้างอุโมงค์ SSH:“ ช่อง 1: เปิดล้มเหลว: ไม่อนุญาตให้ดำเนินการ: เปิดล้มเหลว”


184

เมื่อฉันเปิดอุโมงค์ SSH นี้:

ssh -nXNT -p 22 localhost -L 0.0.0.0:8984:remote:8983

ฉันได้รับข้อผิดพลาดนี้เมื่อพยายามเข้าถึงเซิร์ฟเวอร์ HTTP ที่ทำงานบน localhost: 8984:

channel 1: open failed: administratively prohibited: open failed

ข้อผิดพลาดนี้หมายถึงอะไรและเครื่องใดที่คุณสามารถแก้ไขปัญหาได้


บางทีฉันอาจจะพลาดบางสิ่งบางอย่าง แต่ทำไมคุณถึงพยายามเข้าถึงเว็บเซิร์ฟเวอร์โดยใช้ไคลเอ็นต์ ssh
Faheem Mitha

ทำไมคุณส่งต่อ X11 (ตัวเลือก -X) ที่นี่? หากคุณต้องการส่งต่อ HTTP เท่านั้นไม่จำเป็น และในฐานะที่เป็นบันทึกด้านข้าง IMHO ssh อาจเป็นทางออกที่ผิดที่จะทำให้เว็บเซิร์ฟเวอร์พร้อมใช้งานในหลายพอร์ต
Marcel G

29
ฉันพบสิ่งนี้เพื่อหมายถึง "ไม่สามารถแก้ไขชื่อโฮสต์remote" ในกรณีของฉัน
RobM

3
ดังที่คุณเห็นได้จากคำตอบหลายสิบด้านล่างข้อความแสดงข้อผิดพลาดแม้จะดูเฉพาะเจาะจงมาก แต่ก็ควรเข้าใจว่าเป็นข้อผิดพลาดทั่วไป โดยทั่วไปการแก้ปัญหาคือการเปิดเปลือกที่ระยะไกลและลองเชื่อมต่อเดียวกันเพื่อดูสาเหตุที่แท้จริง คุณจะพบคำตอบด้านล่างสาเหตุที่พบบ่อยที่สุด
Stéphane Gourichon

ความล้มเหลวในการแก้ปัญหา DNS อาจทำให้เกิดข้อผิดพลาดนี้รวมถึงการเชื่อมต่ออาจหยุดจนกว่าจะหมดเวลา: superuser.com/a/700677
user423430

คำตอบ:


122

ช่องที่ 1: เปิดล้มเหลว: ไม่อนุญาตให้ดำเนินการ: เปิดล้มเหลว

ข้อความด้านบนหมายถึงเซิร์ฟเวอร์ SSH ของคุณปฏิเสธคำขอ SSH ของลูกค้าเพื่อเปิดช่องด้านข้าง นี้มักจะมาจาก-D, -Lหรือ-wเป็นช่องทางในกระแส SSH จะต้องข้ามฟากข้อมูลที่ส่งต่อไปทั่ว

เนื่องจากคุณกำลังใช้-L(ใช้ได้กับ-D) มีคำถามสองตัวเลือกที่ทำให้เซิร์ฟเวอร์ SSH ของคุณปฏิเสธคำขอนี้:

  • AllowTcpForwarding (ดังที่ Steve Buzonas พูดถึง)
  • PermitOpen

/etc/ssh/sshd_configตัวเลือกเหล่านี้สามารถพบได้ใน คุณควรมั่นใจว่า:

  • AllowTCPForwarding ไม่เป็นปัจจุบันแสดงความคิดเห็นหรือตั้งค่าเป็น yes
  • PermitOpenไม่แสดงความคิดเห็นหรือตั้งค่าเป็นany[1]

นอกจากนี้หากคุณกำลังใช้กุญแจ SSH เพื่อเชื่อมต่อคุณควรตรวจสอบว่ารายการที่สอดคล้องกับคีย์ SSH ของคุณ~/.ssh/authorized_keysไม่มีno-port-forwardingหรือpermitopenคำสั่ง [2]

ไม่เกี่ยวข้องกับคำสั่งเฉพาะของคุณ แต่ค่อนข้างเกี่ยวข้องกับหัวข้อนี้เช่นกันเป็นPermitTunnelตัวเลือกหากคุณพยายามใช้ตัวเลือก -w

[1] ไวยากรณ์ทั้งหมดในsshd_config(5)manpage

[2] ไวยากรณ์ทั้งหมดในauthorized_keys(5)manpage


นี่คือสิ่งที่ฉันเพิ่มใน sshd_config โดยเฉพาะเพื่อให้ทำงาน: TCPKeepAlive ใช่ AllowTCPForwarding ใช่ PermitOpen ใด ๆ ฉันมี "เปิดล้มเหลว" แต่ดูเหมือนว่าเป็นเรื่องปกติ สิ่งที่ทำงานได้ดีมาก
Pierre Thibault

4
กรณีมุมที่ควรทราบ: คุณสามารถได้รับข้อผิดพลาดนี้เมื่อพยายามสร้างอุปกรณ์ tap / tun โดยใช้ SSH และ SSH อนุญาตให้ทำได้ แต่เคอร์เนลไม่ได้ สิ่งนี้สามารถเกิดขึ้นได้ในคอนเทนเนอร์ LXC ดูที่blog.felixbrucker.com/2015/10/01/…สำหรับรายละเอียดที่แน่นอน แต่ในกรณีนี้คุณอาจต้องการเพิ่มlxc.cgroup.devices.allow = c 10:200 rwmการกำหนดค่าของคอนเทนเนอร์และตรวจสอบให้แน่ใจว่าหาก/dev/net/tunไม่มีอยู่ให้ mknod /dev/net/tun c 10 200; chmod 666 /dev/net/tunรันบน bootup ในคอนเทนเนอร์
Azendale

@ Azendale น่าสนใจขอบคุณ มันให้ข้อผิดพลาดเดียวกันแน่นอนหรือสิ่งที่แตกต่างกันเล็กน้อย?
hyperair

1
@ St.Antario AllowTcpForwardingอนุญาตให้คุณส่งต่อพอร์ต TCP ผ่าน SSH ซึ่งเป็นสิ่งที่-L 0.0.0.0:8984:remote:8983พารามิเตอร์ร้องขอ หากAllowTcpForwardingตั้งค่าเป็นnoSSH จะปฏิเสธคำขอส่งต่อพอร์ตทำให้คุณเห็นข้อผิดพลาดนั้น
ไฮเปอร์แอร์

2
พยายามแก้ไขตัวพิมพ์ใหญ่ของAllowTCPForwardingถึงAllowTcpForwardingแต่ SE ต้องการเปลี่ยนอย่างน้อย 6 ตัวอักษร ดังนั้นโปรดสังเกตว่ากรณีที่ถูกต้องคือTcpรุ่นตามที่ใช้อย่างถูกต้องในครั้งแรก
dbreaux

51

ในกรณีที่แปลกมากฉันยังพบข้อผิดพลาดนี้ในขณะที่พยายามสร้างอุโมงค์ท้องถิ่น คำสั่งของฉันคืออะไรเช่นนี้:

ssh -L 1234:localhost:1234 user@remote

ปัญหาเกิดขึ้นบนรีโมตโฮสต์/etc/hostsไม่มีรายการสำหรับ "localhost" ดังนั้นเซิร์ฟเวอร์ ssh ไม่ทราบวิธีตั้งค่าช่องสัญญาณ ข้อความแสดงข้อผิดพลาดที่ไม่เป็นมิตรมากสำหรับกรณีนี้ ดีใจที่ฉันคิดออกในที่สุด

บทเรียน: ให้แน่ใจว่าชื่อโฮสต์เป้าหมายของคุณคืออุโมงค์ resolvable โดยโฮสต์ระยะไกลทั้งผ่าน DNS /etc/hostsหรือ


2
ขอบคุณนี่เป็นปัญหาสำหรับฉัน ฉันสร้างชื่อโฮสต์สำหรับ IP ในเครื่อง แต่ไม่ได้อยู่บนเซิร์ฟเวอร์ ssh ระยะไกล
dev_feed

2
"ชื่อโฮสต์เป้าหมายของอุโมงค์ของคุณ" ยากต่อการถอดรหัส คุณสามารถยกตัวอย่างที่เป็นรูปธรรมที่สามารถทำงานได้ซึ่งจะอนุญาตให้ฉันนำตัวอย่างของคุณและแทนที่ "ชื่อโฮสต์เป้าหมาย" ในตัวอย่างของคุณด้วยชื่อโฮสต์เป้าหมายของฉัน (เมื่อฉันเข้าใจสิ่งที่คุณหมายถึงโดย) และมีงานนี้หรือไม่
Terrence Brannon

1
ฉันไม่แน่ใจด้วยซ้ำว่าความคิดเห็นของคุณสมเหตุสมผลแล้ว คุณบอกว่าเครื่องระยะไกลไม่มีรายการสำหรับ localhost แต่แล้วบอกว่ารีโมตโฮสต์ต้องแก้ไขชื่อโฮสต์เป้าหมายไม่ใช่ชื่อโฮสต์โลคัล อีกตัวอย่างที่สมบูรณ์ของสถานการณ์ก่อนและหลังจะเป็นประโยชน์
Terrence Brannon

1
@TerrenceBrannon ในคำสั่งดังกล่าว "localhost" เป็นชื่อโฮสต์เป้าหมายของอุโมงค์ เมื่อสร้าง SSH tunnel คำสั่ง ssh จะล็อกเข้าสู่ระบบรีโมตก่อน ( user@remote) จากท้ายรีโมตจะตั้งค่า tunnels ไปยังโฮสต์เป้าหมายที่แสดงรายการ (ในคำสั่งด้านบนนี่คือlocalhost) เมื่อทำสิ่งนี้จะใช้รูปแบบการแก้ปัญหาชื่อโฮสต์บนโฮสต์ระยะไกล ดังนั้นหากเครื่องที่คุณใช้ SSH ไม่สามารถแก้ไขได้localhostคุณจะได้รับข้อความแสดงข้อผิดพลาดนี้
cobbzilla

1
ในกรณีของฉันมันง่ายเหมือนการพิมพ์ผิดชื่อโฮสต์เป้าหมายดังนั้นแน่นอนว่ามันไม่ได้รับการแก้ไข แต่สายตาของฉันพลาดที่จะเห็นการพิมพ์ผิดนานเกินไป
แรนดัลล์

25

อย่างน้อยหนึ่งคำตอบก็คือเครื่อง "remote" ไม่สามารถเข้าถึงได้ด้วย ssh ด้วยเหตุผลบางอย่าง ข้อความแสดงข้อผิดพลาดเป็นเพียงเรื่องเหลวไหล


2
ไม่มันไม่ใช่ ฉันใช้ icmp-admin- แบนด์เป็นปฏิเสธการตั้งค่าสถานะในไฟร์วอลล์กำหนดค่าตลอดเวลา
Shadur

9
+1, ข้อความที่ไม่ได้รับอนุญาตจากผู้ดูแลระบบจะทำให้เกิดความเชื่อว่าเป็นการปิดกั้นไฟร์วอลล์อย่างไรก็ตามคุณได้รับข้อความเดียวกันเมื่อไม่มีการบล็อกไฟร์วอลล์ แต่การเปิดล้มเหลวเนื่องจากไม่มีเส้นทางไปยังโฮสต์ระยะไกล
Steve Buzonas

1
ฉันเพิ่งใช้เวลาหลายนาทีในการตามล่าปัญหานี้ซึ่งข้อความไม่สมเหตุสมผลในบริบทของฉัน โชคดีที่มันชัดเจนในการตรวจสอบไฟล์บันทึกของสถานีกลาง
yaccz

แน่นอนถ้า "ระยะไกล" ไม่สามารถเข้าถึงได้ - เนื่องจากไม่สามารถใช้งานได้ออฟไลน์ไม่มีชื่อโฮสต์ไม่สามารถแก้ไขได้ - คุณจะเห็นข้อความแสดงข้อผิดพลาดนี้
Michael Martinez

18

หากไม่สามารถแก้ไข 'ระยะไกล' บนเซิร์ฟเวอร์คุณจะได้รับข้อผิดพลาดนั้น แทนที่ด้วยที่อยู่ IP และดูว่าจะช่วยแก้ปัญหาของคุณ ...

(คำตอบเดียวกับ Neil - แต่ฉันก็พบว่าเป็นปัญหาด้านข้างของฉัน) [ฉันมีนามแฝงสำหรับชื่อเครื่องใน~/.ssh/configไฟล์ของฉัน- และเครื่องระยะไกลไม่ทราบว่ามีชื่อแทนอะไร ...


คุณอาจเห็นข้อผิดพลาดเดียวกันเมื่อใช้-D(DynamicForward) เป็นพร็อกซี SOCKS ในเบราว์เซอร์ นั่นคือพยายามที่จะเข้าถึงเว็บไซต์ที่โฮสต์อุโมงค์ไม่สามารถแก้ไขได้
timss

10

ข้อผิดพลาดนี้จะปรากฏขึ้นอย่างแน่นอนเมื่อคุณใช้ตัวเลือก ssh ControlPathและControlMasterสำหรับการแบ่งปันการเชื่อมต่อซ็อกเก็ตเดียวเพื่อนำมาใช้ซ้ำระหว่างการเชื่อมต่อไคลเอนต์หลาย (จากไคลเอนต์หนึ่งไปยังผู้ใช้ @ เซิร์ฟเวอร์เดียวกัน) การเปิดมากเกินไป (หมายความว่าอะไรในกรณีของฉัน ~ การเชื่อมต่อ 20 ครั้ง) จะให้ข้อความนี้ การปิดการเชื่อมต่อใด ๆ ก่อนหน้านี้ทำให้ฉันเปิดใหม่ได้อีกมากถึงขีด จำกัด


ฉันมาที่นี่เพื่อค้นหาตำแหน่งที่จะตั้งค่าขีด จำกัด multiplex ControlMaster หากใครรู้พวกเขายินดีต้อนรับสู่แบ่งปันมากกว่า
clacke

1
clacke: ตามbugs.debian.org/cgi-bin/bugreport.cgi?bug=546854คุณสามารถเพิ่มพารามิเตอร์ MaxSession ในไฟล์ / etc / ssh / sshd_config เพื่อตั้งค่านี้ ตามหน้า man นี้ถูกตั้งค่าเป็น 10 โดยค่าเริ่มต้น
โอลิเวอร์

@oliver: การยืนยัน MaxSession ทำงานขอบคุณ กระแทกกับ 64 ในสมุดงานของฉัน
Matej Kovac

2
ระวังมันไม่ได้แต่MaxSession MaxSessionsแม้ว่าจะมีการป้องกันอยู่บ้างอย่าทำลายการกำหนดค่าเซิร์ฟเวอร์ ssh ของคุณ ...
Stéphane Gourichon

8

"administratively ห้าม" คือการตั้งค่าสถานะข้อความ ICMP เฉพาะที่เดือดลงไป "ผู้ดูแลระบบต้องการให้การเชื่อมต่อนี้ถูกบล็อกอย่างชัดเจน"

ตรวจสอบการตั้งค่า iptables ของคุณ


5
ไม่จำเป็น. ข้อความถูกสร้างขึ้นเมื่อโฮสต์ไม่สามารถตอบสนองการร้องขอ กรณีนี้เป็นเพราะผู้ดูแลระบบได้บล็อกการเชื่อมต่อ แต่ก็อาจเป็นได้ว่ามันไม่ได้ถูกบล็อกอย่างชัดเจน แต่ไม่มีเส้นทางไปยังโฮสต์ที่ต้องการ AFAIK sshไม่มีเหตุผลในการระบุสาเหตุที่ทำให้การเชื่อมต่อล้มเหลวเพียงแค่สมมติว่าหากคุณพยายามเชื่อมต่อก็จะมีอยู่และถ้าคุณไม่สามารถไปถึงที่นั่นการเชื่อมต่อนั้นจะต้องถูกบล็อกโดยเจตนา
Steve Buzonas

2
เอ่อไม่ มีความแตกต่างที่ชัดเจนระหว่างประเภทของการตอบสนองของ ICMP ที่ระบุว่า "ไม่มีเส้นทางไปยังโฮสต์" และอีกอย่างหนึ่งที่ระบุว่า "ไม่อนุญาตให้ดำเนินการ" และถ้ามีคนจงใจกำหนดค่าเราเตอร์ให้ผิด
Shadur

1
ฉันเพิ่งได้รับ 'ไม่อนุญาตให้ดำเนินการ' เมื่อใช้ชื่อโฮสต์ที่ไม่ได้รับการแก้ไขดังนั้นจึงดูเหมือนจะเป็นเรื่องที่จับได้ทั้งหมด บางที ssh กำลังทำการแปลบางอย่าง?
Ganesh Sittampalam

5

ปัญหาที่คล้ายกัน

นำไปได้อีกอย่างหนึ่ง

ฉันมีปัญหาเดียวกันโดยใช้กับ~/.ssh/authorized_keyspermitopen

เมื่อฉันใช้autosshเพื่อสร้างอุโมงค์ฉันต้องมีสองพอร์ต:

  • หนึ่งสำหรับการเชื่อมต่อ (10,000)
  • หนึ่งสำหรับการตรวจสอบ (1,0001)

ในฝั่งลูกค้า

สิ่งนี้ทำให้ฉันมีปัญหาคล้ายกันกับพอร์ตการตรวจสอบ:

autossh -M 10001 -o GatewayPorts=yes -o ServerAliveInterval=60  -o TCPKeepAlive=yes -T -N -R :10000:localhost:22 -i ~/.ssh/id_rsa user@remote

ฉันมีข้อความนั้น (หลังจาก 10 นาที):

channel 2: open failed: administratively prohibited: open failed

ด้านระยะไกล

ที่/var/log/auth.logมีอยู่ของฉัน:

Received request to connect to host 127.0.0.1 port 10001, but the request was denied.

ใน~/.ssh/authorized_keys(ด้านไกล) ฉันมีสิ่งนี้:

command="/home/user/tunnel",no-X11-forwarding,no-pty,permitopen="localhost:10000",permitopen="localhost:10001" ssh-rsa AAAA...

วิธีแก้ปัญหา

ฉันแก้ไขได้โดยแทนที่localhostอินสแตนซ์ด้วย127.0.0.1:

command="/home/user/tunnel",no-X11-forwarding,no-pty,permitopen="127.0.0.1:10000",permitopen="127.0.0.1:10001" ssh-rsa AAAA...

ดูเหมือนว่า SSH ไม่เข้าใจว่าlocalhostเป็นทางลัด127.0.0.1ดังนั้นข้อความในauth.logและข้อความที่ต้องห้ามในการดำเนินการ

สิ่งที่ฉันเข้าใจที่นี่คือการบริหารหมายถึง "เนื่องจากการกำหนดค่าเฉพาะในฝั่งเซิร์ฟเวอร์"


localhost น่าจะจับคู่กับ :: 1 (ipv6) และคุณไม่ได้ฟังที่นั่นด้วยเหตุผลบางอย่าง
Jo Rhett

4

สิ่งนี้จะเกิดขึ้นเมื่อ/etc/sshd_configมี

AllowTcpForwarding no 

ชุด สลับเป็นเพื่อyesอนุญาตการส่งต่อ TCP


4

ในกรณีของฉันฉันต้องแทนที่localhostด้วย127.0.0.1ใน:

ssh -L 1234:localhost:3389 user@remote

เพื่อให้มันทำงาน

ผมพยายามที่จะrdesktop -L localhost:1234ต่อไปนี้ของ Amazon คำแนะนำเกี่ยวกับการเชื่อมต่อกับ AWS EC2 ผ่าน SSH อุโมงค์ ฉันพยายามเปลี่ยน/etc/ssh/sshd_config(ทั้งไคลเอนต์และเซิร์ฟเวอร์เรียกใช้ Ubuntu 16.04 LTS) ต่อคำตอบที่โหวตสูงสุด ฉันยังตรวจสอบว่าlocalhostมี/etc/hostsทั้งสองด้าน

ไม่มีอะไรทำงานจนกว่าฉันจะเปลี่ยนsshคำสั่งเป็น:

ssh -L 1234:127.0.0.1:3389 user@remote

ขอบคุณมาก!
Thibaut Barrère

3

กิจกรรมการแก้ไขปัญหาบางอย่างเป็นสิ่งจำเป็นเพื่อค้นหาคำตอบที่ชัดเจน:

  • ตรวจสอบว่าเปิดใช้งานการส่งต่อพอร์ตในการกำหนดค่า ssh ของผู้ใช้
  • เปิดใช้งาน verbosity ของ ssh (-v),
  • ตรวจสอบบันทึก ssh บนโลคัลโฮสต์และล็อกที่ปลอดภัยบนรีโมต
  • ทดสอบพอร์ตระยะไกลที่แตกต่างกัน
  • ตรวจสอบการตั้งค่า iptables ของคุณ (ดังที่ Shadur กล่าว)

3

ฉันได้รับข้อผิดพลาดนี้ครั้งเดียวสำหรับการวางรีโมตในพารามิเตอร์ -L เช่นกัน 0.0.0.0 นั้นซ้ำซ้อนคุณสามารถละเว้นมันด้วยผลลัพธ์เดียวกันได้และฉันคิดว่าคุณควรเพิ่ม -g เพื่อให้ทำงานได้

นี่คือบรรทัดที่ฉันใช้สำหรับการขุดอุโมงค์: ssh -L 8983:locahost:8984 user@remote -4 -g -N

-4 tells to use only ipv4
-g Allows remote hosts to connect to local forwarded ports.
-N Do not execute a remote command.  This is useful for just forwarding ports (protocol version 2 only). I use this to clog the terminal so I don't forget to close it since generally I need the tunnels temporarily.

3

นอกจากนี้ยังอาจเกิดจากการไม่สามารถผูกกับพอร์ตในด้านท้องถิ่น

ssh -Nn -L 1234:remote:5678 user@remote

คำสั่งนี้พยายามเชื่อมพอร์ตการรับฟัง 1234 บนเครื่องโลคัลซึ่งแม็พกับเซอร์วิสบนพอร์ต 5678 บนเครื่องรีโมต

หากพอร์ต 1234 บนเครื่องโลคัลถูกใช้โดยกระบวนการอื่นอยู่แล้ว (อาจเป็นแบ็คกราวน์ ssh -f เซสชัน) ดังนั้น ssh จะไม่สามารถฟังบนพอร์ตนั้นและอุโมงค์จะล้มเหลว

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

lsof -ti:1234

เพื่อค้นหาว่ากระบวนการใดที่ทำงานบน 1234 คุณอาจต้องใช้ sudo เพื่อแสดงรายการกระบวนการที่ผู้ใช้รายอื่นเป็นเจ้าของ จากนั้นคุณสามารถใช้

ps aux | grep <pid>

เพื่อค้นหาว่ากระบวนการนั้นคืออะไร

เพื่อให้ได้ทั้งหมดนี้ในคำสั่งเดียว:

ps aux | grep "$(sudo lsof -ti:1234)"

2

ฉันมีข้อความเดียวกันขณะพยายามอุโมงค์ มีปัญหากับเซิร์ฟเวอร์ dns ที่ด้านระยะไกล ปัญหาได้รับการแก้ไขเมื่อกลับมาทำงาน


2

ฉันประหลาดใจอย่างยิ่งที่ไม่มีใครพูดถึงว่านี่อาจเป็นปัญหา DNS

journalctl -f
channel 3: open failed: administratively prohibited: open failed
Mar 10 15:24:57 hostname sshd[30303]: error: connect_to user@example.com: unknown host (Name or service not known)

สิ่งนี้อาจถูกนำเสนอหากremoteไม่สามารถแก้ไขได้หรือคุณป้อนไวยากรณ์ที่ไม่รู้จักเช่นที่ฉันทำที่นี่ซึ่งฉันได้เพิ่มuser@ไว้ในตรรกะการส่งต่อพอร์ต (ซึ่งจะไม่ทำงาน)


2

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

channel 2: open failed: administratively prohibited: open failed  

การกำหนดค่าอุโมงค์ของฉันเป็นดังนี้:

ssh -p [ssh-port] -N -f -L [local-port]:127.0.0.1:[remote-port]
[server-address]

ข้อผิดพลาดแสดงให้เห็นเมื่อเข้าสู่เซิร์ฟเวอร์โดยตรง (ไม่มี -N -f):

WARNING: Your password has expired. You must change your password now
and login again!

ฉันแก้ไขปัญหาด้วยการเข้าสู่ระบบด้วยการเข้าถึงเชลล์และเปลี่ยนรหัสผ่าน จากนั้นฉันก็สามารถใช้อุโมงค์โดยไม่ต้องเข้าถึงเชลล์อีกครั้ง


1

ฉันมีปัญหานี้เมื่อพยายามเชื่อมต่อผ่าน SSH กับผู้ใช้ที่ได้รับอนุญาตให้เชื่อมต่อโดยใช้ SFTP เท่านั้น

ตัวอย่างเช่นสิ่งนี้อยู่ในเซิร์ฟเวอร์/etc/ssh/sshd_config:

Match group sftponly
    ForceCommand internal-sftp
    ChrootDirectory /usr/chroot/%u
    [...]
Match

ดังนั้นในกรณีนี้หากต้องการใช้ SSH คุณจะต้องลบผู้ใช้ออกจากsftponlyกลุ่มที่เทียบเท่าหรือเชื่อมต่อโดยใช้ผู้ใช้ที่ไม่ จำกัด SFTP


1

ตรวจสอบว่า/etc/resolv.confว่างเปล่าบนเซิร์ฟเวอร์ที่คุณกำลังsshจะไป หลายครั้งที่ฉันพบสิ่งนี้เกี่ยวข้องกับ/etc/resolv.confไฟล์ว่างเปล่า

หากไม่ใช่รูทคุณสามารถตรวจสอบเซิร์ฟเวอร์โดยลองใช้บางส่วนpingหรือtelnet(80) บนชื่อโฮสต์สาธารณะเช่น:

root@bananapi ~ # telnet www.google.com 80
telnet: could not resolve www.google.com/80: Name or service not known

หลังจากเพิ่มระเบียนเนมเซิร์ฟเวอร์ไปที่/etc/resolv.conf:

root@bananapi ~ # telnet www.google.com 80
Trying 74.125.195.104...
Connected to www.google.com.
Escape character is '^]'.
GET / HTTP/1.0

HTTP/1.0 302 Found
Location: http://www.google.ro/?gws_rd=cr&ei=8fStVZ-hMIv6UvX6iuAK

อย่างไรก็ตามคุณควรตรวจสอบด้วยว่าเหตุใดจึง/etc/resolv.confว่างเปล่า (โดยทั่วไปจะมีข้อมูลที่มีชื่อเนมเซิร์ฟเวอร์โดยไคลเอ็นต์ dhcp บนเซิร์ฟเวอร์ถ้ามี


1

ฉันได้รับข้อความเดียวกันในขณะที่ SSH ปรับไปที่เดเบียน มันเปิดออกระบบระยะไกลไม่มีพื้นที่ว่าง หลังจากเพิ่มพื้นที่ว่างในดิสก์และรีบูตอุโมงค์เริ่มทำงาน


0

ฉันเห็นข้อผิดพลาดนี้ใน cygwin และสิ่งนี้ควรเป็นจริงสำหรับ linux เช่นกันและทำงานให้ฉัน ในกรณีของฉันฉันทำ ssh -ND *: 1234 user@127.0.0.1 และเมื่อฉันเชื่อมต่อเบราว์เซอร์กับเซิร์ฟเวอร์ comp-socks นั้นก็เรียกดู แต่ในคอมพ์ที่ฉันเรียกใช้คำสั่ง ssh นั้นฉันได้รับข้อผิดพลาดนั้นปรากฏที่ คอนโซลพร้อมคำขอแต่ละรายการ - อย่างน้อยหนึ่งไซต์แม้ว่าเบราว์เซอร์จะดึงข้อมูลผ่านพร็อกซีหรือดูเหมือนว่าอย่างน้อยก็เท่าที่ฉันเห็นอายุหลัก แต่การเปลี่ยนแปลงนี้จะกำจัดข้อความที่ล้มเหลว

http://linuxindetails.wordpress.com/2010/02/18/channel-3-open-failed-administratively-prohibited-open-failed/

While trying to do some SSH tunneling, here is the error I got :
channel 3: open failed: administratively prohibited: open failed
To avoid this kind of error, have a look at the SSH daemon configuration file :
/etc/ssh/sshd_config
Add possibly the following line :
root@remote-server:~# echo “PermitTunnel yes” >> /etc/ssh/sshd_config
Then, restart your sshd server :
root@remote-server:~# service ssh restart
or

root@remote-server:~# /etc/init.d/ssh restart

ช่องสัญญาณ AFAIK เปิดใช้งานตามค่าเริ่มต้นเนื่องจากการปิดใช้งานไม่ได้เพิ่มความปลอดภัยให้กับเลเยอร์ส่วนใหญ่เป็นเพียงความไม่สะดวกในการเพิ่มช่องสัญญาณของบุคคลที่สาม ฉันมีปัญหาที่คล้ายกันพยายามที่จะพร็อกซีเซิร์ฟเวอร์ภายในจากสถานที่ปิดเว็บไซต์และอุโมงค์ถูกเปิดใช้งาน + iptables ACCEPTล้างด้วยการกระทำที่จะเริ่มต้น
Steve Buzonas

@ SteveBuzonas ฉันเห็นสิ่งนี้ใน / etc / sshd_config ดังนั้น) มันไม่ได้ปิดการใช้งาน b) ตามคำตอบของฉันทางออกอาจไม่มีความคิดที่ดี นี่คือสิ่งที่ sshd_config พูดเกี่ยวกับตัวเลือก # หากต้องการปิดการใช้รหัสผ่านข้อความที่ชัดเจนช่องสัญญาณให้เปลี่ยนเป็นไม่ที่นี่! #PermitTunnel no
barlop

@SteveBuzonas ตรวจสอบสิ่งที่คุณคิดว่าอาจถูกตั้งค่าเป็นไม่และคุณสามารถสร้างช่องสัญญาณได้ตามค่าเริ่มต้น
barlop

ฉันคิดว่าความAllowTCPForwardingคิดเห็นที่คุณกำลังพูดถึง# To disable tunneled clear textนั้นเกี่ยวกับPasswordAuthenticationการตั้งค่าเป็นไม่PermitTunnelเป็นการตั้งค่าเพื่ออนุญาตให้อุโมงค์เครือข่ายเลเยอร์ 2 หรือเลเยอร์ 3 ผ่านทาง tun / tap และค่าเริ่มต้นเป็น no ตัวเลือก L, R และ D ใช้การส่งต่อ TCP และไม่ใช่อุปกรณ์สำหรับการสร้างช่องสัญญาณ
Steve Buzonas

0

อีกสถานการณ์หนึ่งคือบริการที่คุณพยายามเข้าถึงนั้นไม่ได้ทำงานอยู่ ฉันพบปัญหานี้ในวันอื่น ๆ เพื่อจำอินสแตนซ์ httpd ที่ฉันพยายามเชื่อมต่อได้หยุดทำงาน

ขั้นตอนในการแก้ไขปัญหาของคุณคือการเริ่มต้นด้วยวิธีที่ง่ายที่สุดซึ่งจะไปที่เครื่องอื่นและดูว่าคุณสามารถเชื่อมต่อภายในเครื่องจากนั้นกลับไปทำงานกับคอมพิวเตอร์ไคลเอนต์ของคุณ อย่างน้อยนี่จะช่วยให้คุณสามารถทำงานได้ตามจุดที่การสื่อสารไม่ได้เกิดขึ้น คุณสามารถใช้วิธีอื่น ๆ ได้ แต่นี่เป็นวิธีที่ใช้ได้ผลสำหรับฉัน


เคล็ดลับทั่วไปที่มีประโยชน์ แต่ไม่ใช่คำตอบสำหรับคำถามที่โพสต์
Kyle Jones

0

ตรวจสอบเราเตอร์เพื่อรับการป้องกันDNS Rebinding เราเตอร์ (pfsense) ของฉันมี DNS Rebinding Protection ที่เปิดใช้งานโดยค่าเริ่มต้น มันเป็นสาเหตุของข้อผิดพลาด 'ช่องทางที่เปิด: ล้มเหลวในการดำเนินงานที่ไม่ได้รับอนุญาต: การเปิดล้มเหลว' กับ SSH


0

ฉันมีปัญหาเดียวกันและฉันรู้ว่ามันเป็น DNS ปริมาณการใช้ข้อมูลถูกรับส่งในช่องสัญญาณ แต่ไม่มีการร้องขอ DNS ลองแก้ไขไฟล์โฮสต์ DNS ของคุณด้วยตนเองและเพิ่มบริการที่คุณต้องการเข้าถึง


0

กรณีของฉัน:

$ssh -D 8081 localhost >>log1.txt 2>&1 &

----wait for 3 days

$tail -f log1.txt
channel 963: open failed: connect failed: Connection refused
channel 963: open failed: connect failed: Connection refused
channel 971: open failed: connect failed: Connection reset by peer
channel 982: open failed: connect failed: Connection timed out
channel 979: open failed: connect failed: Connection timed out
channel 1019: open failed: administratively prohibited: open failed
accept: Too many open files
channel 1019: open failed: administratively prohibited: open failed
accept: Too many open files
channel 1019: open failed: administratively prohibited: open failed

$ps  axu | grep 8081
root       404  0.0  0.0   4244   592 pts/1    S+   05:44   0:00 grep --color=auto 8081
root       807  0.3  0.6   8596  6192 ?        S    Mar17  76:44 ssh -D 8081 localhost

$lsof -p 807 | grep TCP
ssh     807 root 1013u  sock     0,8      0t0 2076902 protocol: TCP
ssh     807 root 1014u  sock     0,8      0t0 2078751 protocol: TCP
ssh     807 root 1015u  sock     0,8      0t0 2076894 protocol: TCP
.....

$lsof -p 807 | wc -l
1047

$ cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   malcolm-desktop

$ssh localhost
Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-53-generic i686)

----after restart ssh -D 8081 localhost
$ lsof -p 1184 | grep TCP
ssh     1184 root    3u  IPv4 2332193      0t0   TCP localhost:37742->localhost:ssh (ESTABLISHED)
ssh     1184 root    4u  IPv6 2332197      0t0   TCP ip6-localhost:tproxy (LISTEN)
ssh     1184 root    5u  IPv4 2332198      0t0   TCP localhost:tproxy (LISTEN)
ssh     1184 root    6u  IPv4 2332215      0t0   TCP localhost:tproxy->localhost:60136 (ESTABLISHED)
ssh     1184 root    7u  IPv4 2336142      0t0   TCP localhost:tproxy->localhost:32928 (CLOSE_WAIT)
ssh     1184 root    8u  IPv4 2336062      0t0   TCP localhost:tproxy->localhost:32880 (CLOSE_WAIT)

0

ฉันพบข้อผิดพลาดขณะเขียนข้อความนี้ในบล็อกของฉัน :

/etc/ssh/sshd_config มีบางสิ่งที่ชอบ:

Match Group SSHTunnel_RemoteAccessGroup
    AllowTcpForwarding yes
    PermitOpen=sshbeyondremote.server.com:22

แต่~/.ssh/configมี:

Host remote.server.com
  HostName remote.server.com
  Port 10022
  User useronremote
  IdentityFile ~/.ssh/keys/key1/openssh.keyforremote.priv
  LocalForward 2222 SSHBeyondRemote.server.com:22

หมายเหตุ: ความแตกต่างในกรณี (ตัวพิมพ์ใหญ่) ระหว่างSSHBeyondRemote.server.com:22และsshbeyondremote.server.com:22

เมื่อฉันแก้ไขกรณีฉันไม่เห็นปัญหาอีกต่อไป

ฉันใช้:

รุ่นของไคลเอนต์ OpenSSH:

  • OpenSSH_7.2p2 Ubuntu-4ubuntu2.4, OpenSSL 1.0.2g 1 มี.ค. 2559

รุ่นของเซิร์ฟเวอร์ OpenSSH:

  • OpenSSH_7.6p1 Debian-4, OpenSSL 1.0.2n 7 ธันวาคม 2560

1
หากคุณกำลังจะเชื่อมโยงส่งเสริมอ้างอิงหรืออ้างถึงสิ่งที่คุณเป็นพันธมิตรคุณจะต้องเปิดเผยการเป็นพันธมิตรนั้นอย่างชัดเจน การพูด '' ขณะรวม (link) '' ไม่เพียงพอ (เพราะฉันไม่เข้าใจความหมายจนกระทั่งหลังจากที่ฉันคิดว่าคุณกำลังเชื่อมโยงไปยังบล็อกของคุณเอง); การมี URL ที่ตรงกับชื่อผู้ใช้ Stack Exchange ของคุณนั้นไม่เพียงพอ ข้อมูลอ้างอิง: จะไม่เป็นผู้ส่งสแปมได้อย่างไร,  หลีกเลี่ยงการโปรโมตตนเองมากเกินไป ... (ต่อ)
สกอตต์

(ต่อ) …และเราควรบังคับใช้ข้อกำหนดการเป็นพันธมิตรเมื่อใด    คุณมีอิสระที่จะพูดถึงบล็อกนายจ้างของคุณซอฟต์แวร์ที่เป็นที่รู้จักที่คุณได้พัฒนาหนังสือใด ๆ ที่คุณเขียนโครงการอื่น ๆ ที่คุณเป็นหรือเคยเป็นพันธมิตร ฯลฯ ในหน้าโปรไฟล์ผู้ใช้ของคุณ.
สกอตต์

0

สาเหตุการแก้ไขชื่ออื่น ๆ : / etc / hosts ของฉันมีที่อยู่ IP ที่ผิดพลาดสำหรับชื่อของเซิร์ฟเวอร์ (ไม่ใช่สำหรับ localhost) เช่นนี้:

127.0.0.1     localhost
192.168.2.45  server.domain.com server

แต่ IP ของเซิร์ฟเวอร์ที่กำหนดค่า (และชื่อ DNS ที่ได้รับการแก้ไขด้วยคำสั่ง host / dig) คือ 192.168.2.47 การพิมพ์ผิดง่ายที่เกิดจากการกำหนดค่า IP ก่อนหน้า หลังจากแก้ไข / etc / hosts การเชื่อมต่อกับอุโมงค์ยังทำงานได้อย่างไร้ที่ติ:

ssh user@server.domain.com -L 3456:127.0.0.1:5901

เป็นเรื่องแปลกที่ IP จริงทำให้เกิดความล้มเหลวเมื่อฉันใช้ IP ตามตัวอักษร localhost สำหรับช่องสัญญาณ Distro: Ubuntu 16.04 LTS


0

เหตุผลที่ฉันมีข้อความนั้นไม่ใช่ข้อความธรรมดาที่สุด แต่ควรพูดถึง ฉันสร้างรายการอุโมงค์โดยสคริปต์และเพื่อให้แน่ใจว่างานนำเสนอคอลัมน์ฉันได้พิมพ์แต่ละไบต์สุดท้ายด้วยสองไบต์ เมื่อฉันพยายามที่จะเปิดอุโมงค์ส่งต่อไปที่ 192.168.66.08 มันล้มเหลวเสมอเพราะ gethostbyaddr แปลเป็น '08' โดยเป็นตัวเลขฐานแปดที่ไม่ถูกต้อง :)


0

ดูเหมือนว่ามีสาเหตุที่เป็นไปได้มากมายสำหรับข้อความนี้ ในกรณีของฉันมันเป็นความสามารถในการเข้าถึงระยะไกลเพราะฉันไม่ได้ให้keyfileอย่างถูกต้อง

-Lตัวเลือกเพิ่มกระโดด SSH นัย (อย่างมีประสิทธิภาพโดยใช้โฮสต์ SSH อย่างชัดเจนเป็นเซิร์ฟเวอร์ป้อมปราการ / กระโดด) การดีบักอาจทำได้ง่ายกว่าด้วยการกระโดดอย่างชัดเจนและสร้างเชลล์ล็อกอินให้กับเครื่องเป้าหมายโดยใช้ "proxycommand"

เมื่อสิ่งนี้ทำงานแล้วคุณสามารถทำพอร์ตไปข้างหน้าตามเครื่องเป้าหมายlocalhost(สมมติว่ามันสามารถล็อกอินด้วยตัวเอง):

-N -L 1234:localhost:1234
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.