
Basic Logic
如果我们希望通过自己的电脑控制实验室的电脑(我们暂且统一称为工作站),并且希望摆脱卡顿和麻烦的各种远程桌面软件,那么最简单直接的方式是通过。理论上,只要我们知道工作站的IP地址+用户名+密码,就可以通过下面类型的
ssh、
bash、
powershell代码实现连接:
cmd
ssh username@ip
username@ip's password:_
但是,使用连接有一个基本要求:两台电脑要在同一个局域网内。当我们人不在公司/学校/实验室的时候,如果希望访问公司/学校/实验室内网,只能通过VPN。大部分单位都会提供现成的VPN,但部分单位需要进行申请。假如申请VPN需要几天的等待,并且我们非常着急使用的话,就可以考虑建立一个局域网,让工作站和自己的电脑都连接上同一个局域网,然后再通过
ssh连接。
ssh
一旦通道打通,就可以有各种各样的方法控制电脑了。既可以直接在命令行中控制,也可以通过Vscode连接,和在自己的电脑上跑没有任何区别。使用Vscode连接可以参考本人过往文章:《本地通过Vscode连接服务器完整流程
ssh
》,只需要关注后半部分的“Remote-”即可。
ssh
下面我们介绍如何建立局域网,并在检验后确认使用连接测试:
ssh
注意,下面的许多操作是需要在工作站和自己的电脑同时进行的,所以在这时,远程桌面还是能发挥一定的作用。
Necessary Software
在工作站和自己的电脑下载并安装tailscale:
https://tailscale.com/download/windows
下载完成后,就有一个要求登录的界面,保证两台电脑都登录相同的账号。

这样就表示两台电脑都成功连接了:

*关于为什么要选择tailscale:其实市面上有许多类似的软件,比如Zerotier、Easytier等等。这种不同的组网工具的NAT 穿透策略、默认配置不同以及底层协议都并不相同。tailscale是相对成熟的一个软件,主要面向用户,像Zerotier、Easytier等可手动DIY许多设置,真正学起来十分费劲。笔者尝试过使用Zerotier、Easytier,但都败给了公司/学校/实验室的网络。
Check the Connection Status
寻找工作站在此时的IP:打开powershell
tailscale ip
找到工作站ip,尝试ping一下工作站(就是ping+ip),下面的内容就表示工作站和自己的电脑是连通的:
(base) C:UsersJ3540>ping 100.115.209.96
Pinging 100.115.209.96 with 32 bytes of data:
Reply from 100.115.209.96: bytes=32 time=1702ms TTL=128
Reply from 100.115.209.96: bytes=32 time=1268ms TTL=128
Reply from 100.115.209.96: bytes=32 time=418ms TTL=128
Reply from 100.115.209.96: bytes=32 time=416ms TTL=128
Ping statistics for 100.115.209.96:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 416ms, Maximum = 1702ms, Average = 951ms
检查并打开工作站的服务:以管理员权限打开Powershell(注意一定是powershell,cmd不行):
ssh
Get-Service sshd
正常情况下会看到
Status Name DisplayName
------ ---- -----------
Stopped sshd OpenSSH SSH Server
### 或者看到
Status Name DisplayName
------ ---- -----------
running sshd OpenSSH SSH Server
然后
Start-Service sshd
假如在输入后提示*“服务不存在”**:
Get-Service
# 安装 OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
# 启动服务
Start-Service sshd
# 设置开机自启
Set-Service -Name sshd -StartupType 'Automatic'
# 放行防火墙
New-NetFirewallRule -Name "OpenSSH-Server" -DisplayName "OpenSSH Server (sshd)" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
找到工作站的用户名和密码。工作站的用户名可以打开cmd后输入 后得到,至于密码,如果没有的话建议建立一个,这样比较方便连接(因为
whoami只接受密码/密钥连接)。找到工作站的用户名、密码和IP之后,就能像本文开头一样:
ssh
ssh username@ip
首次连接还会显示
...#省略两行
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
输入yes之后就会让输密码,然后就大工告成了。

