![如何通过互联网安全地 SSH 进入家里的机器](https://linux22.com/image/988727/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E4%BA%92%E8%81%94%E7%BD%91%E5%AE%89%E5%85%A8%E5%9C%B0%20SSH%20%E8%BF%9B%E5%85%A5%E5%AE%B6%E9%87%8C%E7%9A%84%E6%9C%BA%E5%99%A8.png)
我很快就要出行了,我有一台运行一堆 cron 作业等的机器。我需要远程登录来检查作业运行的结果并在机器上做一些工作。
以下是一些显著的事实:
- 要连接的机器(母舰)正在运行 Ubuntu 14.0.4 LTS
- 母舰通过家里的局域网连接到互联网,因此具有面向公众的 IP 地址。
- IP 地址是动态分配的。
- 我将使用运行 Ubuntu 15.10 的笔记本电脑连接到母舰
由于带宽问题,我更喜欢使用 ssh 而不是 VNC - 另外,我需要的只是命令行。
安全地远程连接到我的机器的最佳方法是什么?
答案1
最好的选择可能是在非默认端口(例如 2020)上运行 SSH 服务器。这可以阻止大多数来自网络的暴力攻击尝试,因为这些机器人往往只查看默认端口。
您还需要为服务器分配一个 LAN 上的静态 IP 地址,因为它需要始终可访问。您可以在 中设置它System Settings --> Network
。为防止 IP 地址冲突,还建议您告诉 DHCP 服务器(大多数情况下是路由器)此 IP 地址已被占用。方法因型号而异,但路由器配置中应该有一个区域允许您保留 IP 地址。
使用静态 IP 的原因是您需要在路由器设置中设置端口转发。这允许从端口到您的外部 IP 的连接路由到您服务器上的该端口。
如果你的公共 IP 地址是动态的(很可能是),那么你需要设置某种动态 DNS 服务。我对这项服务的建议是无IP。它为您提供一个始终指向您的公共 IP 的免费子域。此设置确实需要在您的 LAN 上的始终在线的机器上安装一个程序(称为 DUC,由 No-IP 提供)。
按照你的需要设置好 SSH 服务器后,输入以下命令通过 SSH 连接到该服务器:
ssh user@remotehostip -p XXX
或者使用您喜欢的任何 SSH/SFTP 客户端。
如果这些部分中的任何一个需要更详细的说明,请发表评论,我会添加它们。
如果其他人有困难,这里有一个聊天室,里面有更详细的步骤:http://chat.stackexchange.com/rooms/37251/discussion-between-homunculus-reticulli-and-zacharee1
答案2
除了 Zacharee1 的回答之外,您还应该安装 Fail2ban 或 DenyHosts(从 Precise repos 获取 .deb)。如果您正在旅行,则不应使用密钥进行身份验证。同时使用“安全”密码。也许可以设置一个专用的用户帐户,并在不需要管理员权限时限制访问权限。
我不会触碰服务器上的网络设置,静态 IP 可以从路由器分配。路由器 IP 地址应该是 DHCP 中分配的“网关”地址。如果不是 (!),默认地址应该写在它下面的某个地方。如果您更改了它,您应该保留最后一个值。因此,如果您有一个 C 类家庭网络,地址将是 abcx,其中 abc 与您所有其他 IP 地址匹配,x 是路由器标签上的尾随值。无论如何,ISP 应该有帮助页面。
当您使用非标准端口时,请避免使用“22”作为最后一位数字(例如 8122)。它会留下线索。
注意:您可以通过 SSH 访问基于 X 的应用程序,而无需 VNC,这完全是另一个话题。
答案3
除了 NoIP,我建议你编写一个脚本并反复运行,将你的 IP 保存在你选择的云服务中(DropBox、MEGA 等)。例如:
#!/bin/sh
wget http://wtfismyip.com/text -O ~/Dropbox/myip6.txt
wget https://ipv4.wtfismyip.com/text -O ~/Dropbox/myip4.txt
然后运行它,watch -n 1800 sh get_ip.sh
每半小时为您运行一次脚本。