vscode remote ssh 是如何实现 notty 登录的?

2022-07-11 15:33:29 +08:00
 qbuer

在使用 vscode-remote ssh 连接服务器时发现登录信息并不会记录在 /var/log/wtmp 、/var/log/utmp ,也就是 last 和 w 命令都看不到登录信息,使用 ps aux 查用户进程发现是以 notty 模式登录的。但实际上在 vscode 的终端中是有正常的 shell ,也可以正常执行命令的。

很好奇 vscode 是如何实现这种效果的?

2144 次点击
所在节点    Visual Studio Code
7 条回复
hwdef
2022-07-11 15:52:13 +08:00
猜测和 remote 的 server 端有关? remote 的终端里可以执行 code 之类的命令,,感觉不是普通的终端。
qbqbqbqb
2022-07-11 16:41:24 +08:00
应该是 vscode-remote 通过 notty 的方式登录的之后,自己另外启动了一个 non-login 的 shell 。

就像你直接在 Linux 的图形界面里启动多个 GUI 的终端模拟器,w 和 last 里也不会多出东西来一样。
qbqbqbqb
2022-07-11 17:02:23 +08:00
utmp 是登录信息相关的记录(而且也不是所有方式登录都会记录,比如 ssh 非交互式登录就不会记录),和终端没有关系。Linux 里完全可以绕过登录流程创建虚拟终端( pty )。

非交互式登录的 session ,utmp 里没有,也不代表完全追踪不到,比如使用 systemd 的发行版里用 loginctl 或者 systemctl status 还是能看到 vscode-remote 的 session 。
corvofeng
2022-07-11 17:40:37 +08:00
https://corvo.myseu.cn/2022/04/23/2022-04-23-%E6%94%B9%E9%80%A0upterm%E4%BB%A5%E6%94%AF%E6%8C%81VSCode%E8%BF%9C%E7%A8%8B%E8%BF%9E%E6%8E%A5%E4%BB%BB%E6%84%8F%E5%AE%B9%E5%99%A8/#Remote-SSH%E5%8A%9F%E8%83%BD

建立 ssh 连接之后的通信的过程: remote 机器会下载一个 code-server 执行文件, 然后启动, VSCode 之后仅与服务器中的 code-server 通信.
qbuer
2022-07-11 20:10:39 +08:00
受教了!
kouhe3
2022-07-17 09:51:22 +08:00
@corvofeng
VSCode Desktop 是怎么和远程机器的 code server 通信的?
远程开发时用的端口转发是 wstunnel 吗?
corvofeng
2022-07-17 16:28:27 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/865450

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX