SSH2开启会话时指定启动文件可行性分析
·
1 min read
在翻看inshellinsense代码时看到is建立本地终端时有控制加载指定目录下的启动文件。因此我在想SSH2连接Web 终端会话是否也可以呢,这里讨论下可行性。
inshellisense的做法
以bash为例
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参数
SSH2
https://github.com/mscdex/ssh2?tab=readme-ov-file#client-methods
查看SSH2的connect方法中并没有类似的参数,因此直接通过该方法是不可以。
这样不行的情况下,解决办法只有2个。
通过交互式会话执行source命令去加载集成脚本,但弊端是会有回显问题。
stream.write('');
通过执行命令修改启动shell文件,比如bashrc,将加载目标位置脚本的命令写入,这样之后连接后则不会有回显问题。
conn.exec('');
写在最后
done。