เชื่อมต่อกับเซิร์ฟเวอร์ Ubuntu ผ่าน SSH ภายนอก


25

ฉันเพิ่งติดตั้ง Ubuntu Server 12.04 (แม่นยำ Pangolin) และตั้งใจจะใช้เป็นไฟล์เซิร์ฟเวอร์เป็นหลัก ฉันใหม่สำหรับ Linux อย่างสมบูรณ์ดังนั้นนี่จึงเป็นช่วงเวลาการเรียนรู้ที่ยิ่งใหญ่ เมื่อวานนี้ฉันสามารถกำหนดค่าPuTTYบนเครื่อง Windows 7 ของฉันโดยใช้คู่คีย์ SSH เพื่อให้ฉันสามารถจัดการเซิร์ฟเวอร์ Ubuntu จากเดสก์ท็อปของฉัน ใช้งานได้ดีหากเครื่องทั้งสองอยู่ในเครือข่ายเดียวกัน

ในกรณีของแล็ปท็อปของฉัน ( MacBook Air ) อาจไม่ได้อยู่ในเครือข่ายเดียวกันเสมอไป เป็นไปได้หรือไม่ที่จะเชื่อมต่อกับเซิร์ฟเวอร์ Ubuntu จากแล็ปท็อปของฉันผ่าน SSH เมื่ออยู่ในเครือข่ายอื่น

ฉันได้ติดตั้ง avahi daemon เพื่อให้ชื่อโฮสต์ของเซิร์ฟเวอร์ออกอากาศใน LAN และกำหนดค่าเราเตอร์เพื่อให้มันจะกำหนดที่อยู่ IP เดียวกันให้กับเซิร์ฟเวอร์ นอกจากนั้นสิ่งเดียวที่ฉันได้ติดตั้งบนเซิร์ฟเวอร์คือOpenSSHที่ฉันได้ปิดการใช้งานการตรวจสอบรหัสผ่านเพื่อให้คุณสามารถเชื่อมต่อโดยใช้คู่ที่สำคัญเท่านั้น

ฉันคิดว่าฉันจะสามารถทำสิ่งนี้จาก terminal บนแล็ปท็อปของฉัน:

ssh my.external.ip.address user@hostname.local

เมื่อฉันลองคำสั่งนั้นฉันจะได้รับข้อผิดพลาด:

ssh: เชื่อมต่อกับโฮสต์ my.external.ip.address พอร์ต 22: การดำเนินการหมดเวลา

ฉันได้ลองแล้ว

ssh my.external.ip.address user@servers.local.ip.address

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

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

คำตอบ:


23

ก่อนอื่นคำสั่งที่ถูกต้องคือ: ssh user@my.external.ip.address

และควรกำหนดค่าเราเตอร์ให้ส่งต่อพอร์ต SSH 22 ไปยังที่อยู่ IP ภายในเซิร์ฟเวอร์ของคุณ

สำหรับการดีบักเพิ่มเติม:

1) ตรวจสอบว่าพอร์ต 22 (SSH) เปิดอยู่บนเซิร์ฟเวอร์ของคุณและเราเตอร์ (ส่งต่อพอร์ต)

2) ตรวจสอบว่าเซิร์ฟเวอร์ SSH กำลังทำงานบนเซิร์ฟเวอร์ของคุณ

3) การใช้งานping, ssh -vในขณะที่การเชื่อมต่อและดูที่/var/log/auth.logการแก้ปัญหาปัญหาการเชื่อมต่อใด ๆ เพิ่มเติม

1) บนเราเตอร์ของคุณ: ทำตามคำแนะนำเฉพาะเราเตอร์

บนเซิร์ฟเวอร์ของคุณ: sudo ufw status(เว้นแต่คุณจะใช้ยูทิลิตีการกำหนดค่าไฟร์วอลล์อื่น) หรือsudo iptables -L(วิธีการทั่วไป แต่เอาต์พุตที่ซับซ้อน)

วิธีเปิดพอร์ต 22: sudo ufw allow 22

cf https://help.ubuntu.com/12.04/serverguide/firewall.html

2) ตรวจสอบว่าติดตั้งแล้ว: dpkg -l openssh-server

ตรวจสอบว่ามันกำลังทำงาน: service ssh statusหรือps aux | grep sshd

3) บนไคลเอนต์ที่เชื่อมต่อ:

  • ping my.external.ip.address
  • ssh -v user@my.external.ip.address

บนเซิร์ฟเวอร์:

  • sudo less /var/log/auth.log

คุณสามารถตรวจสอบบันทึกของเราเตอร์ได้เช่นกันหากจำเป็น

นี่คือเครื่องสแกนพอร์ตออนไลน์: https://www.grc.com/x/ne.dll?bh0bkyd2

ฉันคิดว่าคุณสามารถใช้เครื่องมือเช่นnmapหรืออื่น ๆ ได้ แต่ฉันยังไม่คุ้นเคยกับมัน

การจัดการกับที่อยู่ IP ภายนอกที่เปลี่ยนแปลง:

1) รับ dynDNS หรือบัญชีที่คล้ายกัน: http://dyn.com/dns/

รายการผู้ให้บริการ DNS แบบไดนามิก:

2) โซลูชันอื่นคือการตั้งค่างาน crontab ซึ่งจะส่งที่อยู่ IP ภายนอกของคุณหรือส่งไปยังที่เก็บข้อมูลออนไลน์เช่น Dropbox

นี่คือสคริปต์ที่เพื่อนของฉันใช้:

    #!/bin/bash
    # Bash script to get the external IP address
    MYWANIP=$(curl http://mire.ipadsl.net | sed -nr -e 's|^.*<span class="ip">([0-9.]+)</span>.*$|\1| p')
    echo "My IP address is: $MYWANIP"

    IPold=$(cat /home/USER/Dropbox/test.txt)
    echo "Previous IP Address: $IPold"

    if [[ $IPold != $MYWANIP ]] ;
    then
      echo "New IP"
      rm /home/USER/Dropbox/test.txt
      echo $MYWANIP >> /home/USER/Dropbox/test.txt;
      echo $MYWANIP;
    else
      echo "Same IP";
    fi

    # example crontab entry:
    ## m h  dom mon dow   command
    ## */10 * * * * /home/USER/Dropbox/test_ip.sh

การส่งต่อพอร์ตเราเตอร์:

1) ขั้นแรกให้หาที่อยู่ IP ในท้องถิ่นของเราเตอร์ของคุณโดยเรียกใช้:

ip route | grep default

มันมักจะเป็นอะไรที่เหมือนกับ 192.168.xx

วิธีทางเลือกและโซลูชันระบบปฏิบัติการอื่น ๆ :

2) การใช้คอมพิวเตอร์ที่เชื่อมต่อในประเทศกับเราเตอร์, การเข้าถึง IP พบก่อนหน้านี้คือผ่านhttp://192.168.1.1ตัวอย่างเช่น สิ่งนี้จะแสดงอินเตอร์เฟสการกำหนดค่าเราเตอร์

3) ขั้นตอนต่อไปจะแตกต่างกันไปขึ้นอยู่กับเราเตอร์ของคุณ นี่คือวิธีการทำบนเราเตอร์ที่มี OpenWRT ตัวอย่างเช่น:

https://newspaint.wordpress.com/2012/08/26/how-to-add-a-port-forward-using-the-web-interface-on-openwrt-10-03-1/


ขอบคุณสำหรับสิ่งนี้ฉันจะทำตามคำแนะนำทันที
Aesir

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

คุณช่วยอธิบายได้อย่างไรว่าฉันจะส่งต่อพอร์ต 22 บนเราเตอร์ของฉันไปยังเซิร์ฟเวอร์ได้อย่างไร นั่นหมายความว่าอย่างไร? ขอขอบคุณ!
xxx222

ขึ้นอยู่กับว่าคุณมีเราเตอร์ตัวใด แต่โดยปกติควรมีการส่งต่อพอร์ตหรือหน้าการตั้งค่าไฟร์วอลล์ที่ใดที่หนึ่ง นี่คือวิธีทำบนเราเตอร์ที่มี OpenWRT: journalaint.wordpress.com/2012/08/26/…เราเตอร์ส่วนใหญ่สามารถกำหนดค่าได้โดยไปที่ 192.168.1.1 หรือที่อยู่ 192.168.xx ที่คล้ายกันจากเบราว์เซอร์ของคุณหากคุณอยู่ เครือข่ายเดียวกันกับเราเตอร์
KIAaze

3

ตามค่าเริ่มต้นใน Ubuntu (เดสก์ท็อป) SSH ไม่ได้ติดตั้ง

คุณสามารถติดตั้งโดยใช้คำสั่งต่อไปนี้ใน Terminal:

sudo apt-get install openssh-server

ควรติดตั้งและเริ่มให้บริการทันที


2
+1 มันใช้งานได้ดีมากเมื่อฉันลอง ฉันสามารถ ssh ไปยังเครื่อง Ubuntu ได้ทันทีหลังจากเรียกใช้คำสั่งนั้น (สำหรับUbuntu 14.04 (Trusty Tahr) รุ่นเดสก์ท็อป 64 บิต)
Peter Mortensen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.