我在通过单个命令行通过 ssh 使用 gpg-agent 时遇到问题。
这是我的配置:
服务器 A:通过 ssh 触发命令。
ssh user@serverB "sudo -E /path/to/script.sh"
Run Code Online (Sandbox Code Playgroud)
服务器 B:执行需要密码签名的脚本。
系统信息:Ubuntu 12.04
我已经在服务器 B 上设置了 gpg-agent,我已经将此配置添加到 /home/user/.bashrc :
Invoke GnuPG-Agent the first time we login.
# Does `~/.gpg-agent-info' exist and points to gpg-agent process accepting signals?
if test -f $HOME/.gpg-agent-info && \
kill -0 `cut -d: -f 2 $HOME/.gpg-agent-info` 2>/dev/null; then
GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info | cut -c 16-`
else
# No, gpg-agent not available; start gpg-agent
eval `gpg-agent --daemon --write-env-file $HOME/.gpg-agent-info`
fi
export GPG_TTY=`tty` …Run Code Online (Sandbox Code Playgroud) 我有一些 PHP 脚本,它们以#!/usr/bin/env php. 默认解释器是 PHP 4.4,但脚本需要 PHP 5.3,所以我在 中创建了一个别名~/.bashrc:
alias php="/usr/local/bin/php5-53LATEST-CLI"
Run Code Online (Sandbox Code Playgroud)
因此调用php -v显示我 5.3 但#!/usr/bin/env php仍然使用 4.4。我不会更改脚本。那么我怎样才能获得 PHP 5.3#!/usr/bin/env php呢?
我们在 CentOS 上运行了 Apache。基本上,我在 /etc/environment 中有一些变量,它们使用 PassEnv 传递给我们的 Apache 配置。问题是因为 Apache 在 /etc/environment 之前,所以找不到变量。
是否有类似的 /etc/environment 文件,我可以将全局环境变量添加到在 apache (httpd) 之前执行的文件中,还是必须开始编辑运行级别?
亲切的问候,
史蒂夫
我定义一些环境变量,像APP_ENV在我的/etc/environment文件中,在我的ArchLinux的。
如果我输入printenv,我会看到它们。
我创建了这个简单的测试文件,名为… test.php
<?php
var_dump(getenv('APP_ENV'));
var_dump(getenv());
Run Code Online (Sandbox Code Playgroud)
如果我运行php test.php,一切正常,我会看到我的 ENV 变量。
但是当我尝试通过 HTTP 访问文件时……我的环境中什么也没有!
当然,我已经改变了/etc/php/php-fpm.d/www.conf设置clear_env = no
这些是受影响的行:
; Clear environment in FPM workers
; Prevents arbitrary environment variables from reaching FPM worker processes
; by clearing the environment in workers before env vars specified in this
; pool configuration are added.
; Setting to "no" will make all environment variables available to PHP code
; via getenv(), $_ENV …Run Code Online (Sandbox Code Playgroud) 我有一个简单的脚本:
#!/usr/bin/env perl -w
print "Hello World\n"
Run Code Online (Sandbox Code Playgroud)
制作这个可执行文件,在 Linux 上运行,我得到:
/usr/bin/env: perl -w: No such file or directory
Run Code Online (Sandbox Code Playgroud)
(没有 -w,这可以正常工作)
在 Solaris 8 机器上运行相同的脚本会产生正确的输出。
关于为什么会这样的任何建议?
这个问题一直困扰着我一段时间:我想使用奇妙的 GNUwatch命令来运行一些在我的 .bashrc 中定义的自定义别名和函数,但它永远无法运行除了 bash 内置程序或二进制文件之外的任何东西。
watch -d foo
输出总是: foo: command not found
如何让它继承我的环境或使用 .bashrc?
谢谢你。
我正在尝试 sudo 一些位于自定义路径中的二进制文件。sudo虽然我运行时会删除该自定义路径,但sudo -E应该保留我的路径。为什么不起作用?
$ 环境 | egrep ^路径 PATH=/home/codemonkey/.nvm/v0.6.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/gam es:/usr/游戏 $ sudo 环境 | egrep ^路径 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin $ sudo -E 环境 | egrep ^路径 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
我知道如何解决它,我只想知道为什么sudo -E不起作用