通过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)在连接时使用ping
, ssh -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 status
或ps 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提供商列表:
- http://dnslookup.me/dynamic-dns/
- http://www.dmoz.org/Computers/Internet/Protocols/DNS/DNS_Providers/Dynamic_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解决方案:
- https://www.cyberciti.biz/faq/how-to-find-gateway-ip-address/
- http://www.howtogeek.com/233952/how-to-find-your-routers-ip-address-on-any-computer-smartphone-or-tablet/
- https://wiki.amahi.org/index.php/Find_Your_Gateway_IP
- https://portforward.com/networking/routers_ip_address.htm
2)使用本地连接到路由器的任何计算机,访问先前找到的IP,例如通过http://192.168.1.1 。 这应该打开路由器配置界面。
3)接下来的步骤因路由器而异。 以下是在具有OpenWRT的路由器上完成的操作:
默认情况下,在Ubuntu(桌面)中未安装SSH。
您可以在终端中通过以下命令安装它:
sudo apt-get install openssh-server
它应该立即安装并启动服务。