![通过 SSH 从外部连接 Ubuntu 服务器](https://linux22.com/image/823307/%E9%80%9A%E8%BF%87%20SSH%20%E4%BB%8E%E5%A4%96%E9%83%A8%E8%BF%9E%E6%8E%A5%20Ubuntu%20%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我最近安装了 Ubuntu Server 12.04 (Precise Pangolin),打算主要将其用作文件服务器。我对 Linux 完全陌生,所以这是一个相当大的学习曲线。昨天我能够配置油灰在我的 Windows 7 机器上使用 SSH 密钥对,这样我就可以从我的桌面管理 Ubuntu Server。只要两台机器都在同一个网络上,就可以正常工作。
就我的笔记本电脑而言(MacBook Air) 可能并不总是在同一个网络上。当我的笔记本电脑位于不同的网络上时,是否可以通过 SSH 从笔记本电脑连接到 Ubuntu 服务器?
我已经安装了 avahi 守护程序,以便服务器的主机名在 LAN 上广播,并配置了路由器,以便它始终为服务器分配相同的 IP 地址。除此之外,我在服务器上安装的唯一东西是OpenSSH我已禁用密码验证,以便您只能使用密钥对进行连接。
我以为我可以从我的笔记本电脑上的终端做这样的事情:
ssh my.external.ip.address [email protected]
当我尝试该命令时出现错误:
ssh:连接到主机 my.external.ip.address 端口 22:操作超时
我也尝试过
ssh my.external.ip.address [email protected]
我收到与之前相同的错误消息。这应该让您知道我想做什么,但这可能吗?如果可能,我该怎么做?
假设我可以通过笔记本电脑上的 ssh 设置外部连接,那么我的 ISP 可能会更改我的外部 IP 地址,从而中断外部连接。我希望能够稳定地连接,也就是说,如果我的 ISP 更改了外部 IP 地址,我仍然能够远程连接到服务器,而不必知道新的外部 IP 地址是什么。
答案1
首先,正确的命令是:
ssh [email protected]
并且应配置路由器以将 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
可可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 [email protected]
在服务器上:
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|^.*<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
替代方法和其他操作系统解决方案:
- 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 的路由器上执行的操作:
答案2
默认情况下,Ubuntu(桌面版)未安装 SSH。
您可以在终端中通过以下命令进行安装:
sudo apt-get install openssh-server
它应该立即安装并启动服务。