Kết nối với máy chủ Ubuntu qua SSH bên ngoài


25

Gần đây tôi đã cài đặt Ubuntu Server 12.04 (Precise Pangolin) và dự định sử dụng nó chủ yếu như một máy chủ tệp. Tôi hoàn toàn mới với Linux, vì vậy đây là một đường cong học tập khá lớn. Hôm qua tôi đã có thể định cấu hình PuTTY trên máy Windows 7 của mình bằng cặp khóa SSH để tôi có thể quản trị Ubuntu Server từ máy tính để bàn của mình. Điều này hoạt động tốt với điều kiện là cả hai máy nằm trên cùng một mạng.

Trong trường hợp máy tính xách tay của tôi ( MacBook Air ), nó có thể không phải lúc nào cũng nằm trên cùng một mạng. Có thể kết nối với máy chủ Ubuntu từ máy tính xách tay của tôi thông qua SSH khi nó ở trên một mạng khác không?

Tôi đã cài đặt avahi daemon để tên máy chủ cho máy chủ được phát trên mạng LAN và định cấu hình bộ định tuyến để nó sẽ luôn gán cùng một địa chỉ IP cho máy chủ. Ngoài ra, điều duy nhất tôi đã cài đặt trên máy chủ là OpenSSH nơi tôi đã tắt xác thực mật khẩu để bạn chỉ có thể kết nối bằng cặp khóa.

Tôi nghĩ rằng tôi sẽ có thể làm một cái gì đó như thế này từ thiết bị đầu cuối trên máy tính xách tay của tôi:

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

Khi tôi thử lệnh đó, tôi gặp lỗi:

ssh: kết nối với máy chủ my.external.ip.address 22: hoạt động đã hết thời gian

Tôi cũng đã thử

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

và tôi nhận được thông báo lỗi như trước. Vì vậy, điều đó sẽ cho bạn một ý tưởng về những gì tôi đang cố gắng làm, nhưng điều này có thể không, và nếu có, làm thế nào để tôi làm điều đó?

Giả sử tôi có thể thiết lập kết nối bên ngoài qua ssh từ máy tính xách tay của mình, có khả năng ISP của tôi sẽ thay đổi địa chỉ IP bên ngoài sẽ phá vỡ kết nối bên ngoài. Tôi muốn có thể kết nối mạnh mẽ, đó là, nếu ISP của tôi thay đổi địa chỉ IP bên ngoài, tôi vẫn có thể kết nối từ xa đến máy chủ mà không cần phải biết địa chỉ IP bên ngoài mới là gì.

Câu trả lời:


23

Trước hết, lệnh chính xác là: ssh user@my.external.ip.address

Và bộ định tuyến phải được cấu hình để chuyển tiếp cổng SSH 22 đến địa chỉ IP cục bộ của máy chủ của bạn.

Để gỡ lỗi thêm:

1) Kiểm tra xem cổng 22 (SSH) có mở trên máy chủ của bạn và trên bộ định tuyến (chuyển tiếp cổng) không.

2) Kiểm tra xem máy chủ SSH có đang chạy trên máy chủ của bạn không

3) Sử dụng ping, ssh -vtrong khi kết nối và xem xét /var/log/auth.logđể gỡ lỗi mọi sự cố kết nối khác.

1) Trên bộ định tuyến của bạn: làm theo hướng dẫn cụ thể của bộ định tuyến

Trên máy chủ của bạn: sudo ufw status(trừ khi bạn sử dụng tiện ích cấu hình tường lửa khác) hoặc sudo iptables -L(phương pháp chung, nhưng đầu ra phức tạp)

Để mở cổng 22: sudo ufw allow 22

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

2) Kiểm tra xem nó đã được cài đặt chưa: dpkg -l openssh-server

Kiểm tra nó đang chạy: service ssh statushayps aux | grep sshd

3) Trên máy khách kết nối:

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

Trên máy chủ:

  • sudo less /var/log/auth.log

Bạn có thể kiểm tra nhật ký bộ định tuyến nếu cần thiết.

Đây là trình quét cổng trực tuyến: https://www.grc.com/x/ne.dll?bh0bkyd2

Tôi nghĩ bạn cũng có thể sử dụng các công cụ như nmap hoặc các công cụ khác, nhưng tôi chưa quen với chúng.

Xử lý thay đổi địa chỉ IP bên ngoài:

1) Nhận một dynDNS hoặc tài khoản tương tự: http://dyn.com/dns/

Danh sách các nhà cung cấp DNS động:

2) Một giải pháp khác, là thiết lập một công việc crontab, thường xuyên gửi cho bạn địa chỉ IP bên ngoài của bạn hoặc đưa vào một dịch vụ lưu trữ trực tuyến như dropbox.

Đây là một kịch bản mà một người bạn của tôi sử dụng:

    #!/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

Chuyển tiếp cổng bộ định tuyến:

1) Trước tiên, hãy tìm ra địa chỉ IP cục bộ của bộ định tuyến của bạn bằng cách chạy:

ip route | grep default

Nó thường là một cái gì đó như 192.168.xx

Các cách khác và các giải pháp HĐH khác:

2) Sử dụng bất kỳ máy tính nào được kết nối cục bộ với bộ định tuyến, truy cập IP được tìm thấy trước đó, ví dụ như qua http://192.168.1.1 . Điều này sẽ đưa lên giao diện cấu hình bộ định tuyến.

3) Các bước tiếp theo khác nhau tùy thuộc vào bộ định tuyến của bạn. Đây là cách nó được thực hiện trên một bộ định tuyến với OpenWRT chẳng hạn:

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


Cảm ơn vì điều này, tôi sẽ chạy qua các đề xuất bây giờ.
Aesir

Ok tất cả những gì tôi phải làm là chuyển tiếp cổng 22 trên bộ định tuyến của mình đến máy chủ và nó hoạt động, cảm ơn rất nhiều. Có cách nào để tôi có thể giải quyết phần thứ hai của câu hỏi liên quan đến thực tế là địa chỉ IP bên ngoài của tôi có thể thay đổi không? - Chỉ cần xem chỉnh sửa của bạn, sẽ đọc lên bây giờ.
Aesir

Bạn có thể giải thích làm thế nào tôi có thể chuyển tiếp cổng 22 trên bộ định tuyến của mình đến máy chủ không? Điều đó nghĩa là gì? Cảm ơn bạn!
xxx222

Nó phụ thuộc vào bộ định tuyến bạn có, nhưng thường phải có một trang cài đặt tường lửa hoặc chuyển tiếp cổng ở đâu đó. Dưới đây là cách thực hiện trên bộ định tuyến với OpenWRT: báo chí.wordpress.com / 2012/08/26 / Hầu hết các bộ định tuyến có thể được định cấu hình bằng cách truy cập 192.168.1.1 hoặc địa chỉ 192.168.xx tương tự từ trình duyệt của bạn nếu bạn đang bật cùng mạng với bộ định tuyến.
KIAaze

3

Theo mặc định trong Ubuntu (Máy tính để bàn) SSH không được cài đặt.

Bạn có thể cài đặt nó bằng lệnh sau trong Terminal:

sudo apt-get install openssh-server

Nó nên cài đặt và bắt đầu dịch vụ ngay lập tức.


2
+1. Điều này làm việc tuyệt vời khi tôi đã thử nó. Tôi đã có thể ssh vào máy Ubuntu ngay sau khi chạy lệnh đó (đối với Ubuntu 14.04 (Trusty Tahr), phiên bản máy tính để bàn 64 bit).
Peter Mortensen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.