问题发现
起因是我有一台系统为 Windows 10 专业版的远程开发测试机器,在安装了 Nmap 后,发现通过 VS Code 的“远程资源管理器”连接,在终端中仍然无法被识别 Nmap 命令。搜索了一些类似问题的解决方案发现还是没有解决,于是自己开始进一步排查。
排查过程
检查用户是否为同一个
首先检查一下环境变量写入的用户和 SSH 登录的用户是不是同一个,比如我的 Nmap 是登录用户A的时候安装的,而 SSH 连接的是Administrator,这当然不行。
所以我:
- 手动在
Administrator的PATH中也写入了 Nmap 的路径; - 接着按照网上说的方法,在终端里输入
set PATH=C; - 然后重新 SSH 登录。
再次输入 Nmap 命令,发现用 SSH 工具连接的 Shell 里已经可以识别 Nmap 命令了:

但是 VS Code 环境中问题依旧:
(这里忘记截图了)
罪魁祸首是 Code-Server
这我就纳闷了,难道 VS Code 的 SSH 有什么神秘的地方吗?
还真有。

仔细观察了 VS Code 连接远程资源管理器的输出日志,我发现了这一行:
Found running server(pid=7572)
英语四六级均已通过的高手们应该看出来了,VS Code 连接到远程主机后,会在目标主机上安装 Code Server 的服务,然后这个服务是不会随着连接关闭而结束的,他会一直在跑。我们合理的怀疑,这个 running 的 server 使用的环境变量依旧是我们修改之前的那些环境变量。
解决办法
那么我们就手动杀死这个 code-server 让他重新启动就可以了。
tskill <pid>
对于我而言就是:
tskill 7572
然后重新连接远程主机,尝试 nmap 命令:

太好了,解决了。