【问题标题】:Deployer SSH bash not loading profile filesDeployer SSH bash 未加载配置文件
【发布时间】:2020-04-06 02:00:21
【问题描述】:

我正在使用Deployer 将 SSH 连接到服务器并运行一些脚本进行部署。我不知道 Deployer 如何执行 ssh 的内部细节。

问题是它只有$PATH 的片段,这意味着无法找到部署所需的二进制文件。我尝试在all the files I can think of 中添加一个新的测试变量$FOO 以查看加载了哪个:

  • ~/.bash_profile
  • ~/.bashrc
  • ~/.profile
  • /etc/profile
  • /etc/bash.bashrc

与:

...


export FOO="etcprofile"

但它们都不起作用,因为在运行 Deployer 时 $FOO 的值为空。

我还检查了 Deployer 中的标志和命令,似乎没有任何异常:

deploy.php

task('debug:print', function () use($stage) {
    run('echo $PATH');
    run('echo $SHELL');
    run('export');
    dump($stage->getShellCommand());
    dump($stage->getSshArguments());
    exit("DONE");
});

输出

falnyr@local:/Projects/deployer-app $ dep deploy stage-server -vvv
➤ Executing task debug:print
[stage-server] > echo $PATH
[stage-server] < ssh multiplexing initialization
[stage-server] < Linux stage-server xxx x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

[stage-server] < /usr/local/bin:/usr/bin:/bin:/usr/games
[stage-server] > echo $SHELL
[stage-server] < /bin/bash
[stage-server] > export
[stage-server] < declare -x HOME="/home/admin"
[stage-server] < declare -x LANG="en_US.UTF-8"
[stage-server] < declare -x LC_CTYPE="en_NZ.UTF-8"
[stage-server] < declare -x LOGNAME="admin"
[stage-server] < declare -x MAIL="/var/mail/admin"
[stage-server] < declare -x OLDPWD
[stage-server] < declare -x PATH="/usr/local/bin:/usr/bin:/bin:/usr/games"
[stage-server] < declare -x PWD="/home/admin"
[stage-server] < declare -x SHELL="/bin/bash"
[stage-server] < declare -x SHLVL="2"
[stage-server] < declare -x SSH_CLIENT="xxx.xxx.xxx.xxx 62738 22"
[stage-server] < declare -x SSH_CONNECTION="xxx.xxx.xxx.xxx 62738 xxx.xxx.xxx.xxx 22"
[stage-server] < declare -x USER="admin"
[stage-server] < declare -x XDG_RUNTIME_DIR="/run/user/1000"
[stage-server] < declare -x XDG_SESSION_ID="xxxxxx"
[stage-server] < declare -x _="/bin/bash"
"bash -s"
Deployer\Ssh\Arguments {#166
  -flags: []
  -options: []
}
DONE

我还有另一台配置类似的服务器,它似乎运行良好。我不确定要查找什么来识别配置中的差异。

【问题讨论】:

    标签: linux bash shell ssh php-deployer


    【解决方案1】:

    脚本不会获取您的个人资料,除非它们的 shebang 类似于 #!/bin/bash -i 或者它们在将使用您的变量的行上方包含类似 . $HOME/.profile 的行。

    不过,别指望别名会起作用。功能更好。

    最后一个想法:从 Web 服务器运行 shell 脚本是相当冒险的。进行系统调用是一样的;有人可能会操纵它来获取外壳,然后对您的系统造成严重破坏。

    【讨论】:

    • 问题在于bash -s 的使用,它接受来自标准输入的命令,也可能是多路复用。这不是一个 shell,而是一个 PHP 脚本。我对这种方式的部署普遍感到担忧——尽管此时我无法轻易改变它。如果有人发布一个答案来解释为什么配置文件没有被加载或者$PATH 实际来自哪里,我将等待。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 2020-11-09
    相关资源
    最近更新 更多