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


25

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

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

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

我以为我可以从笔记本电脑的终端上执行以下操作:

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地址是什么。

Answers:


23

首先,正确的命令是: ssh user@my.external.ip.address

并且应该将路由器配置为将SSH端口22转发到服务器的本地IP地址。

为了进一步调试:

1)检查服务器和路由器上的端口22(SSH)是否打开(端口转发)。

2)检查您的服务器上是否正在运行SSH服务器

3)在连接时使用pingssh -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 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

路由器端口转发:

1)首先,运行以下命令找出路由器的本地IP地址:

ip route | grep default

通常类似于192.168.xx

替代方法和其他OS解决方案:

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)2012年

好的,我要做的就是将路由器上的端口22转发到服务器,它可以正常工作,非常感谢。关于我的外部IP地址可能会更改的事实,我是否可以解决问题的第二部分?-刚刚看到您的修改,现在将阅读。
伊西尔(Aesir)2012年

您能解释一下如何将路由器上的端口22转发到服务器吗?这意味着什么?谢谢!
xxx222 '16

这取决于您拥有的路由器,但是通常在某处应该有一个端口转发或防火墙设置页面。以下是在具有OpenWRT的路由器上执行此操作的方法:newspaint.wordpress.com/2012/08/26/…如果您使用的是大多数路由器,可以通过从浏览器访问192.168.1.1或类似的192.168.xx地址来进行配置与路由器相同的网络。
KIAaze

3

在Ubuntu(Desktop)中,默认情况下未安装SSH。

您可以在终端中通过以下命令进行安装:

sudo apt-get install openssh-server

它应该立即安装并启动服务。


2
+1。当我尝试过时,这个效果很好。运行该命令后,我能够立即切换到Ubuntu计算机(对于Ubuntu 14.04(Trusty Tahr),64位桌面版)。
Peter Mortensen 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.