运行 通过 ssh 连接的脚本然后 运行 npm install pm2 结果:'npm: command not found'

Running a script to connect through ssh then run npm install pm2 results in: 'npm: command not found'

我运行从我的本地机器上执行这个命令:

ssh -tt -i "pem.pem" ec2-user@ec2-IPADDRESS.compute-1.amazonaws.com "sudo su -c 'cd /dir/;npm install pm2'"

它连接,作为超级用户运行,cds 到目录并尝试 运行 命令,但是 returns that npm 不是系统识别的命令。

但是,当我“手动”连接时,即

ssh -i "pem.pem" ec2-user@ec2-IPADDRESS.compute-1.amazonaws.com
sudo su
cd /dir
npm install pm2

有效。

npm安装在root下,系统可以看到

ssh -tt -i "pem.pem" ec2-user@ec2-IPADDRESS.compute-1.amazonaws.com "sudo su -c 'cd /dir/;whoami'"

ssh -i "pem.pem" ec2-user@ec2-IPADDRESS.compute-1.amazonaws.com
sudo su
cd /dir
whoami

两个return“root”

为什么在 ssh 上 运行 找不到 npm 命令?

当您登录时,您会创建一个交互式 shell,它通常会读取几个文件,在本例中包括 /etc/profile$HOME/.profile$HOME/.bashrc .

这些文件中的任何一个都可以向 PATH 变量添加额外的元素(路径),这会影响可以找到哪些命令。

当您直接运行命令行时,不会发生这样的初始化,并且$PATH的值可能仅限于/bin:/usr/bin

接下来是sudo,在查找命令时可能会也可能不会导入PATH的值。

解决方案

您最好找出 npm 的安装位置,并使用其完整路径。