วิธี SSH บนพอร์ตอื่นที่ไม่ใช่ 22


151

ฉันมีคอมพิวเตอร์สองเครื่องอยู่หลังเราเตอร์เดียวกัน ลองเรียกพวกเขาว่า A และ B

สามารถ SSH ถึง B ในลักษณะดังต่อไปนี้: ssh usr@<internal ip of computer>

B สามารถ SSH ถึง A โดยทำเช่นเดียวกัน แต่ต้องใช้ IP ภายนอก ฉันได้ส่งต่อพอร์ต 22 ของเราเตอร์ของฉันไปยัง IP ของคอมพิวเตอร์ A เพื่อให้เหมาะสมกับฉัน

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

ฉันพยายามอนุญาตให้พอร์ต 26 ถึง OUTPUT จากiptablesA และ INPUT ของ B แต่ดูเหมือนจะไม่ทำงาน ฉันได้ส่งต่อพอร์ต 26 ไปยัง IP ภายในของ B (ผ่านเราเตอร์) อย่างที่ฉันทำกับ 22 สำหรับ A

นี่คือสิ่งที่ฉันได้รับเมื่อฉันพยายาม SSH จาก A ถึง B โดยใช้ IP ภายนอกและพอร์ต 26:

ssh: connect to host xx.xx.xxx.xx port 26: Connection refused.

รุ่น:

  • A = OpenSSH_5.9p1 Debian-5ubuntu1, OpenSSL 1.0.1 14 มีนาคม 2555
  • B = OpenSSH_6.0p1 Debian-4, OpenSSL 1.0.1c 10 พฤษภาคม 2555

A มี 12.04 Ubuntu, B คือ Raspberry Pi พร้อม Raspbian

แก้ไข: สิ่งที่ฉันลืมที่จะใส่ใน: ผมไม่ลองเปลี่ยนไฟล์การกำหนดค่า SSH (ผมพบว่ามันเป็น/etc/ssh/ssh_config) ฉัน uncommented (ลบ#) บรรทัดที่มีPortและมีการเปลี่ยนแปลงไป22 26มันทำให้ฉันปฏิเสธการเชื่อมต่อข้อความยัง (ฉันรีบูทโดยไม่มีประโยชน์)


yuu ohave SSH ทำงานบนพอร์ต 22 หรือ 26 บนเครื่องที่สองหรือไม่?
Nerdfest

1
โปรดทราบว่า/ etc / ssh / ssh_configคือการกำหนดค่าลูกค้า ssh โดยที่/ etc / ssh / sshd_configคือ ssh daemon config
steakunderscore

คำตอบ:


45

ดูเหมือนว่าคุณไม่ได้ใช้ SSH ที่พอร์ต 26 บนเครื่องที่สอง คุณสามารถเปลี่ยนหมายเลขพอร์ตบนเครื่องนั้นเป็น 26

แก้ไข/etc/ssh/sshd_configและอย่าลืมรีสตาร์ท SSH หรือปล่อยไว้ที่ 22 แต่ส่งต่อพอร์ต 26 บนเราเตอร์ไปยังพอร์ต 22 บนเครื่องที่สอง นอกจากนี้อย่าลืมเปลี่ยนการตั้งค่าไฟร์วอลล์ในเครื่องที่สองเพื่อให้สามารถเชื่อมต่อได้


อ่า ... ดังนั้น sshd_config ต้องเปลี่ยนไม่ใช่ ssh_config เหรอ?
Gary

2
แก้ไข. sshd เป็นบริการ (d สำหรับ daemon) แก้ไขไฟล์กำหนดค่า (ด้วย sudo gedit) จากนั้นเริ่มบริการใหม่ด้วย "sudo service ssh restart"
Nerdfest

2
แก้ไขปัญหา ไม่จำเป็นต้องเปลี่ยนการตั้งค่าไฟร์วอลล์ใด ๆ
Gary

371

หากคุณอยู่บนระบบ Linux และคุณต้องการเชื่อมต่อกับเซิร์ฟเวอร์ SSH ที่พอร์ต 26 คุณสามารถใช้คำสั่งต่อไปนี้

ssh user@192.168.1.1 -p 26

บันทึก:

  1. แทนที่ IP ของเซิร์ฟเวอร์ด้วยที่อยู่ IP หรือชื่อ DNS ของเซิร์ฟเวอร์ของคุณ
  2. เปลี่ยนหมายเลขพอร์ตของคุณตามที่คุณตั้งไว้
  3. หากคุณใช้พอร์ตที่กำหนดเอง SSH พอร์ตเดียวกันส่วนใหญ่จะได้รับอนุญาตสำหรับการเชื่อมต่อขาออกการเชื่อมต่อขาเข้าบนไฟร์วอลล์มิฉะนั้นการเชื่อมต่อจะไม่สร้าง

17
สิ่งนี้ควรถูกทำเครื่องหมายว่าถูกต้อง
ken_oy

1
ฉันยอมรับว่านี่เป็นคำตอบที่ถูกต้อง อันนี้ง่ายและตรงประเด็น
m4l490n

1
@ แกรี่ทำเครื่องหมายสิ่งนี้ว่าถูกต้อง
บทกวีความเศร้าโศก

7
ไม่ใช่นี่ไม่ใช่คำตอบที่ถูกต้อง OP มีปัญหากับ daemon ที่ไม่ได้ฟังพอร์ตที่ต้องการ เขาขอความช่วยเหลืออย่างชัดเจนเกี่ยวกับเซิร์ฟเวอร์ SSH และ / หรือการกำหนดค่า NAT แต่คำตอบปัจจุบันจะไม่สนใจการโพสต์ต้นฉบับและอธิบายถึงตัวเลือกคำสั่งไคลเอนต์ที่รู้จักกันใน OP แล้ว ฉันสงสัยว่าคำตอบนี้มี upvotes มากมาย
nnovich-OK

2
สิ่งนี้ถูกต้องสำหรับคนส่วนใหญ่ แต่สิ่งนี้ไม่ถูกต้องสำหรับปัญหาของ OP
Ultrasonic54321

9

ฉันใช้พอร์ต 22 สำหรับการเข้าถึงอินทราเน็ต ssh เท่านั้น

สำหรับการเข้าถึงผ่านอินเทอร์เน็ตฉันใช้พอร์ตที่กำหนดเอง (ผิดปกติ) สิ่งนี้มีประโยชน์ที่ฉันจะลดการโหลดที่สร้างโดยสคริปต์เด็กที่สแกนพอร์ต 22 สำหรับ "ชื่อผู้ใช้ที่รู้จักกันดี"

ภายนอกกระบวนการ sshd จะถูกควบคุมโดยxinetdและทำงานในขนานไปกับภายใน sshdกระบวนการ ในตัวอย่างต่อไปนี้ฉันใช้พอร์ต 12345:

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

การxinetdกำหนดค่าคือ:

service ssh-external
{
    socket_type = stream
    wait = no
    protocol = tcp
    type = UNLISTED
    user = root
    server = /usr/sbin/sshd
    server_args = -i -f  /etc/ssh/external-sshd.config
    port = 12345
    log_on_failure += USERID
}

ไฟล์/etc/ssh/external-ssdh.configสามารถเป็นสำเนาของsshdการกำหนดค่าตามปกติของคุณ ตรวจสอบให้แน่ใจว่ามีการกำหนดค่าข้อความต่อไปนี้:

Port 12345
AddressFamily inet

ฉันขอแนะนำให้บังคับใช้การรับรองความถูกต้องของรหัสสาธารณะและปิดใช้งานการตรวจสอบรหัสผ่านสำหรับการเข้าถึงอินเทอร์เน็ต:

PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no

7

ฟังพอร์ตยังสามารถเชื่อมโยงอย่างหนักกับที่อยู่ IP

/ etc / SSH / sshd_config:

ListenAddress 10.10.10.10:22
ListenAddress 20.20.20.20:4444

นี่ควรเป็นความเห็นไม่ใช่คำตอบ
Pablo Pazos

1

ขณะที่ผมได้อธิบายในคำตอบที่เกี่ยวข้องกับลูกค้า SSH ช่วยให้การระบุรูปแบบ URI ssh://user@host:1234เป็น ตัวอย่างเช่น:

ssh  ssh://myuser@mydomain.com:2222

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


0

ไม่ใช่ความคิดที่ดีที่จะเรียกใช้ ssh บนพอร์ตเริ่มต้น (TCP / 22) ไม่ส่งต่อจาก WAN IP 22 ไปยังพอร์ตใดก็ตามที่ใช้ ssh-server บน LAN IP

ในแง่ทั่วไปมากขึ้นในการเชื่อมต่อกับบริการ ssh-server ควรจะฟังบนพอร์ตนั้น คุณต้อง

  1. แก้ไขเมื่อวันที่/etc/ssh/sshd_config( ทราบd ) จากการ#Port 22 Port 26เช่นยกเลิกการใส่เครื่องหมายข้อคิดเห็นและเปลี่ยนพอร์ต อาจดีกว่า 26 อาจเป็นสิ่งที่สุ่มขึ้นมาเช่น 42895
  2. เริ่มบริการ ssh- เซิร์ฟเวอร์

    sudo systemctl restart sshd.service
    

จาก ssh-client คุณจะสามารถเชื่อมต่อได้

ssh user@serverNameOrIP -p 42895

โบนัส: mosh

หากมีการติดตั้งแพ็คเกจ mosh บนเซิร์ฟเวอร์คุณก็ควรใช้

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