从外部通过 SSH 连接到 Ubuntu 服务器

Aes*_*sir 28 server ssh openssh

我最近安装了 Ubuntu Server 12.04 (Precise Pangolin) 并打算将其主要用作文件服务器。我对 Linux 完全陌生,所以这是一个非常大的学习曲线。昨天我能够使用 SSH 密钥对在我的 Windows 7 机器上配置PuTTY,这样我就可以从我的桌面管理 Ubuntu Server。如果两台机器都在同一个网络上,这可以正常工作。

就我的笔记本电脑 ( MacBook Air ) 而言,它可能并不总是在同一网络上。当我的笔记本电脑在不同的网络上时,是否可以通过 SSH 从我的笔记本电脑连接到 Ubuntu 服务器?

我已经安装了 avahi 守护进程,以便在 LAN 上广播服务器的主机名并配置路由器,以便它始终为服务器分配相同的 IP 地址。除此之外,我在服务器上唯一安装的是OpenSSH,我在其中禁用了密码身份验证,因此您只能使用密钥对进行连接。

我以为我可以从笔记本电脑的终端上做这样的事情:

ssh my.external.ip.address user@hostname.local
Run Code Online (Sandbox Code Playgroud)

当我尝试该命令时,出现错误:

ssh:连接到主机 my.external.ip.address 端口 22:操作超时

我也试过

ssh my.external.ip.address user@servers.local.ip.address
Run Code Online (Sandbox Code Playgroud)

我收到与以前相同的错误消息。所以这应该让您了解我正在尝试做什么,但这是否可能,如果可能,我该怎么做?

假设我可以从我的笔记本电脑通过 ssh 设置外部连接,我的 ISP 可能会更改我的外部 IP 地址,这会中断外部连接。我希望能够可靠地连接,也就是说,如果我的 ISP 更改了外部 IP 地址,我仍然可以远程连接到服务器,而无需知道新的外部 IP 地址是什么。

KIA*_*aze 26

首先,正确的命令是: 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

参见https://help.ubuntu.com/12.04/serverguide/firewall.html

2)检查是否安装: dpkg -l openssh-server

检查它是否正在运行:service ssh statusps 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
Run Code Online (Sandbox Code Playgroud)

路由器端口转发:

1)首先,通过运行找出路由器的本地IP地址:

ip route | grep default
Run Code Online (Sandbox Code Playgroud)

它通常类似于 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/