Aru*_*run 2 linux remote nat remote-access
我的一个 Debian 盒子没有 GUI。如何从外部通过命令行连接到它(如 AnyDesk、Teamviewer 等...)?
当我在办公室网络中时,我可以使用 SCP 和 SSH 访问这台机器。但是我怎么能从我家访问呢?动态 DNS(DDNS 或 DynDNS)不适用于我的设置,因为网络提供商没有为路由器的 WAN 端口分配公共 IP
更新:如果每小时连接检查对您不起作用(因为一个小时太长而无法等待它重新连接),请查看autossh。debian 服务器上的整个脚本将以autossh
cron@reboot
或类似的方式替换为适当的命令。
反向 SSH 是您的朋友。您需要一个 SSH 服务器才能使其工作。为此,我将为您提供两种方法,第一种方法假设您可以在家里的机器上打开并运行 SSH 服务器。我将提供一种尝试每小时自动重新连接的方法,这样您家中的 PC 就不必始终在线。由于有时这可能是不可能的或困难的,我也会添加一个更简单、更安全的解决方案,但这需要你有一个 linux VPS。它们通常只需 2 美元/月。
debian服务器上的准备工作:
我假设您已经cron
安装并运行。/etc/cron.hourly
使用以下内容创建一个新文件:(不要忘记chmod +x
文件!)
#!/bin/bash
cstate=$(netstat -na | grep "tcp" | grep "<IP-of-home-machine>:22" | tr -s " " | cut -d " " -f 6 | head -n 1)
cdate=$(date "+%Y-%m-%d %H:%M:%S")
if [[ $cstate == "ESTABLISHED" ]] || [[ $cstate == "TIME_WAIT" ]]
then
echo "[$cdate] SSH connection up. ($cstate)" >> /var/log/check-ssh-relay.log
else
echo "[$cdate] SSH connection broken. ($cstate) Reconnecting..." >> /var/log/check-ssh-relay.log
ssh -N -f -R 12122:localhost:22 <username>@<IP-of-home-machine>
fi
Run Code Online (Sandbox Code Playgroud)
这将每小时检查一次连接是否正常,如果没有,则尝试重新连接。当您家中的 PC 不总是打开时很有用。它将日志信息写入/var/log/check-ssh-relay.log
. 身份验证是通过 SSH 密钥完成的,因此请确保提前正确设置。
在家里的电脑上:
假设你已经正确设置了 openssh-server,你现在需要做的就是:
$ ssh <server-username>@localhost -p 12122
Run Code Online (Sandbox Code Playgroud)
创建 SSH 连接。SCP、SFTP 等 当然也有效。
我个人使用此解决方案。主要是因为我家里没有静态IP。
debian服务器上的准备工作:
与解决方案 1 完全一样,除了<IP-of-home-machine>
您在这里使用 VPS 的 IP。
VPS上的准备:
您需要做的就是以 root 用户身份运行以下命令:
$ ssh -g -f -N -L 0.0.0.0:13122:localhost:12122 root@localhost
Run Code Online (Sandbox Code Playgroud)
这-g
对于允许此端口转发的全局入站连接很重要。
在您家中(或几乎任何地方)的 PC 上:
现在只需使用端口13122
(如上所述)连接到您的 VPS :
$ ssh <username>@<VPS-IP> -p 13122
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2575 次 |
最近记录: |