当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

我最近安装了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: connect to host my.external.ip.address port 22: operation timed out

我也尝试过

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

我得到和以前一样的错误信息。因此,这应该使您了解我要做什么,但这是否可能,如果可以,我该怎么做?

假设我可以从笔记本电脑通过ssh设置外部连接,则ISP可能会更改我的外部IP地址,这会破坏外部连接。我希望能够进行稳健的连接,也就是说,如果我的ISP更改了外部IP地址,我仍然可以远程连接到服务器,而不必知道新的外部IP地址是什么。

最佳思路

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

替代方法和其他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/

次佳思路

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

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

sudo apt-get install openssh-server

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/10398.html,未经允许,请勿转载。