当需要通过一台windows电脑上的vscode来ssh连接另一台电脑上的linux虚拟机进行远程操作,可以通过tailscale来实现。
Linux虚拟机上安装tailscale
由于挂代理下载仍然很慢,而清华镜像源又没有tailscale的软件包,所以可以通过下载 DEB 包安装:
bash
wget https://pkgs.tailscale.com/stable/tailscale_1.86.2_amd64.deb
如果下载仍然很慢,可在windows主机浏览器下载后再拖入虚拟机。
接下来手动安装:
bash
sudo dpkg -i tailscale_*.deb
sudo apt-get install -f # 自动修复依赖
启动并登陆:
bash
sudo tailscale up
复制弹出来的链接,在windows主机的浏览器中打开,建议登陆谷歌邮箱账号,登陆成功linux虚拟机中即可同步读取到登陆结果。
检查是否安装成功:
bash
tailscale version
弹出类似这样的信息安装成功:tailscale version: 1.86.2
另一台Windows电脑上安装tailscale
登陆同样的谷歌邮箱后在下载页直接下载官方客户端:Download | Tailscale
建立ssh连接
在linux虚拟机终端输入下面命令查看ip地址:
bash
tailscale ip
通常是 100.x.y.z
格式的 IPv4 地址,比如是100.87.234.55。
确保另一台电脑上的 Windows 也安装并登录了 Tailscale(使用同一个账号)。
打开windows电脑的vscode,点击左下角的蓝色图标打开远程窗口,点击连接到主机,选择添加新的ssh主机,输入这个格式的命令:ssh 《linux虚拟机的用户名》@<你的-Tailscale-IP>,比如:
bash
ssh ljy@100.87.234.55
配置好后选择连接,输入虚拟机的密码即可成功连接。
通过固定昵称和MagicDNS 域名进行连接
由于IP可能会发生变化,所以可以通过固定的昵称和MagicDNS 域名进行连接会更稳定。
可以在linux虚拟机的终端中输入
bash
tailscale status --json | grep DNSName
或者在安装了tailscale的这台windows电脑的powershell中输入
bash
tailscale status --json | findstr "DNSName"
都可以看到相同的结果,比如
"DNSName": "ljy.tailb55a8b.ts.net.",
"DNSName": "ljy-virtual-machine.tailb55a8b.ts.net.",
所以直接在windows电脑的vscode 添加新的ssh主机 处输入以下命令:
bash
ssh ljy@ljy-virtual-machine.tailb55a8b.ts.net
按照同样的步骤连接并输入密码即可成功连接。
永久生效配置
如果重新启动虚拟机或者安装了tailscale的windows电脑,那么tailscale需要重新开启一下才能连接。即虚拟机需要通过 sudo tailscale up 来
重新登陆认证,windows电脑需要打开tailscale客户端进行连接。
也可以配置一下让虚拟机启动后自动生效:
先去tailscale的管理后台:Keys - Tailscale

点击 "Generate auth key"
选择 "Reusable"

点击 "Generate key"生成密钥。
回到machines选项卡下:Machines - Tailscale

点击虚拟机的 "Disable key expiry"(由于我点过了所以变成了Enable),设置为永不过期。
配置自动登录:
bash
# 启用 tailscale 系统服务开机自启
sudo systemctl enable tailscaled
# 使用永久密钥登录(替换你的密钥)
sudo tailscale up --auth-key=tskey-auth-xxxxxxxxx
# 检查服务状态(应显示 "active (running)")
sudo systemctl status tailscaled