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

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

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

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

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

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

首先,正确的命令是: 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 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|^.*([0-9.]+).*$|\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: ## mh 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/

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

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

 sudo apt-get install openssh-server 

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