SSH2开启会话时指定启动文件可行性分析

在翻看inshellinsense代码时看到is建立本地终端时有控制加载指定目录下的启动文件。因此我在想SSH2连接Web 终端会话是否也可以呢,这里讨论下可行性。

inshellisense的做法

以bash为例

1
2
3
4
5
6
7
8
9
shellArgs = ["--init-file", path.join(shellFolderPath, "shellIntegration.bash")];

this.#pty = pty.spawn(shellTarget, shellArgs ?? [], {
name: "xterm-256color",
cols,
rows,
cwd: process.cwd(),
env: { ...convertToPtyEnv(shell, underTest, login), ...env },
});

可以看到实现的原理是spawn的第二个参数传入了shell参数,比如bash有–init-file参数

https://static.1991421.cn/2024/2024-06-29-235653.jpeg

SSH2

https://github.com/mscdex/ssh2?tab=readme-ov-file#client-methods

查看SSH2的connect方法中并没有类似的参数,因此直接通过该方法是不可以。

这样不行的情况下,解决办法只有2个。

  1. 通过交互式会话执行source命令去加载集成脚本,但弊端是会有回显问题。

    1
    stream.write('');
  2. 通过执行命令修改启动shell文件,比如bashrc,将加载目标位置脚本的命令写入,这样之后连接后则不会有回显问题。

    1
    conn.exec('');

写在最后

done。