Linux 部署程序SSH bash未加载配置文件

Linux 部署程序SSH bash未加载配置文件,linux,bash,shell,ssh,php-deployer,Linux,Bash,Shell,Ssh,Php Deployer,我使用SSH连接到服务器并运行一些脚本进行部署。我不知道Deployer如何执行ssh的内部细节 问题是它只有一个$PATH片段,这意味着无法找到部署所需的二进制文件。我尝试向中添加一个新的测试变量$FOO,以查看加载了哪个变量: ~/.bash\u配置文件 ~/.bashrc ~/.profile /etc/profile /etc/bash.bashrc 与: 但它们都不起作用,因为在运行Deployer时,$FOO的值为空 我还检查了Deployer中的标志和命令,似乎没有任何异常:

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

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

  • ~/.bash\u配置文件
  • ~/.bashrc
  • ~/.profile
  • /etc/profile
  • /etc/bash.bashrc
与:

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

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

deploy.php

task('debug:print',函数()使用($stage){
运行('echo$PATH');
运行('echo$SHELL');
运行(“导出”);
转储($stage->getShellCommand());
转储($stage->getsCharguments());
退出(“完成”);
});
输出

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
falnyr@local:/Projects/deployer app$dep部署阶段服务器-vvv
➤ 正在执行任务调试:打印
[后台服务器]>echo$PATH
[后台服务器]echo$SHELL
[后台服务器]导出
[后台服务器]

我还有另一台配置类似的服务器,它似乎工作得很好。我不确定要寻找什么来识别配置中的差异。

脚本不会为您的配置文件提供源代码,除非它们的shebang类似于
#/bin/bash-i
或它们包含类似
的行$HOME/.profile
位于将使用变量的行上方

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


最后一个想法:从web服务器运行shell脚本是相当危险的。这和进行系统调用是一样的;有人可能操纵它来获取外壳,然后破坏您的系统。

脚本不会为您的配置文件提供源代码,除非它们的shebang类似于
#/bin/bash-i
或它们包含类似
的行$HOME/.profile
位于将使用变量的行上方

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


最后一个想法:从web服务器运行shell脚本是相当危险的。这和进行系统调用是一样的;有人可能操纵它来获取外壳,然后破坏您的系统。

问题在于使用
bash-s
,它接受stdin的命令,也可能是多路复用。这不是一个shell,而是一个PHP脚本。我以这种方式获得了对部署的普遍关注——但在目前这个时刻,我无法轻易改变这一点。我将等待是否有人发布一个答案,解释为什么配置文件没有被加载,或者bash的
$PATH
实际上来自哪里。问题在于使用
bash-s
时,它接受stdin的命令,也可能是多路复用。这不是一个shell,而是一个PHP脚本。我以这种方式获得了对部署的普遍关注——但在目前这个时刻,我无法轻易改变这一点。如果有人发布了一个答案,解释为什么没有加载配置文件,或者bash的
$PATH
实际上来自哪里,我将等待。
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