0

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

似乎是什么问题?为什么我每次都需要使用ssh2sshpass等自动化工具执行此命令?

我的操作系统是 ubuntu 16.04

4

1 回答 1

1

这与sshpass. 您可以通过不带 运行 ssh 会话来验证这一点sshpass,您会看到即使您手动输入密码,它仍然无法正常工作。

当您运行 ssh 并在其后执行命令时,它会启动一个未连接到 TTY 的远程 shell,并且该 shell 不被视为登录 shell。对于非登录 shell, .profile 根本不会运行。

这个问题的简单解决方案是将环境设置.profile.bashrc. .bashrc甚至可以为非交互式 shell 运行,因此应该提供您需要的环境设置。

附带说明一下,您为什么要使用 sshpass?为什么不使用更安全的公钥认证呢?

澄清一下,shell 未连接到 TTY 的事实与您的问题无关。至少对于 openssh,即使通过-t在命令行上指定提供了要运行的命令,您也可以告诉它打开 TTY。.profile仍然不会运行。

于 2016-08-02T09:50:34.900 回答