bash - 每个用户的 NVM 安装不适用于自动 ssh 登录

标签 bash ubuntu ssh sshpass ssh2-exec

通常当我通过 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/

相关文章:

linux - Linux ubuntu自动为每个物理USB端口分配相同的安装点

linux - 如何通过 ssh 到 linux 杀死 mac os x 上的进程

git - Hudson 不会从 Git 获取数据

ssh - 如何在 AWS 上设置无密码 ssh

linux - 使用 -n 替换后的空白 sed 输出

linux - 从 bash 脚本启动进程时的不同 pid

bash - 通过搜索从字符串中提取 2 个字段

python - 如何删除其中包含特殊字符的行

xml - 使用 sed 命令取消注释 xml block

laravel - 找不到驱动程序(SQL : select * from `users` where `email` = admin@gmail. com 限制 1)”