操作系统 Ubuntu 22.04。
系统有 2 个 shell bash 和 zsh。shell 配置和 .profile 文件都包含启动 nvm 的命令。
nvm 本身已安装并配置。如果您打开终端并输入
nvm -v
它将输出 0.39.5。如果您在 shell 之间切换并重新引导系统,nvm 始终会加载到 shell 中。
如果您从另一台计算机通过 ssh 作为用户测试进行连接 ssh [email protected]
然后一切正常,shell将是zsh并且有nvm和node版本8.17
但是当通过 ssh2 包在节点内运行应用程序时。在同一个用户test、同一个ip 192.22.10.70下,输出所需要的用户和shell相同,whoami = test echo $0 = zsh
但版本节点 = 12,而不是 8
并写入 zsh:1: 未找到命令: nvm
也就是说,当通过ssh2执行命令时,zsh或bash配置文件未加载,nvm导出命令写在哪里?
如果使用 -T 开关连接,则会出现相同的行为
ssh -T [email protected]
示例代码
const { Client } = require('ssh2');
const conn = new Client(); // создаем клиент
let command = "cd /home/manking/test/prog1 && nvm -v 2>&1 | tee /home/manking/test/data/releases/logs/dev.txt"; // nvm not found
// Соединяемся
conn.exec(command, { pty: pty }, (err, stream) => {
if (err) {
console.log('conn.exec err=', err);
}).connect({
host,
port: 22,
username: sshUser, // имя пользователя
privateKey: fs.readFileSync(sshPrivateKey), // ключ ssh
readyTimeout
});