问题描述
我最近安装了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)在连接时使用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
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的路由器上完成的操作:
次佳思路
在Ubuntu(Desktop)中,默认情况下未安装SSH。
您可以在终端中通过以下命令进行安装:
sudo apt-get install openssh-server
它应该立即安装并启动服务。