通常当我通过 putty 登录我的服务器时,我可以使用 nvm、grunt、gulp 命令,但是如果我通过 bash 脚本连接 php 的 ssh2 扩展或 sshpass,除非我先执行以下命令,否则这些命令将不起作用:
~/.nvm/nvm.sh
source ~/.profile
nvm current
这是我的
~/.profile
文件:export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
似乎是什么问题?为什么我每次都需要使用自动化工具(如 ssh2)执行此命令或 sshpass ?
我的操作系统是 ubuntu 16.04
最佳答案
这与 sshpass
无关.您可以通过运行不带 sshpass
的 ssh session 来验证这一点。 ,您会看到即使您手动输入密码,它仍然无法正常工作。
当您运行 ssh 并在其后执行命令时,它会启动一个未连接到 TTY 的远程 shell,并且该 shell 不被视为登录 shell。对于非登录 shell, .profile 根本不会运行。
此问题的简单解决方案是将环境设置从 .profile
至.bashrc
. .bashrc
甚至可以为非交互式 shell 运行,因此应该提供您需要的环境设置。
附带说明一下,您为什么要使用 sshpass?为什么不使用更安全的公钥认证呢?
澄清一下,shell 未连接到 TTY 的事实与您的问题无关。至少对于 openssh,即使通过指定 -t
提供了要运行的命令,您也可以告诉它打开 TTY。在命令行上。 .profile
仍然不会运行。
关于bash - 每个用户的 NVM 安装不适用于自动 ssh 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38322075/