使用php shell访问打印linux变量

使用php shell访问打印linux变量,php,linux,centos,phpseclib,Php,Linux,Centos,Phpseclib,我试图echo一个在Linux(Centos 6.3)中定义的变量。 为了访问服务器,我使用了phpseclib2.0 使用PuTTY(或类似工具)和vfrepc86user访问时,我得到以下输出: vfrepc86@illin935!:vfrepc86> echo $USER vfrepc86 vfrepc86@illin935!:vfrepc86> pwd /vfuser1/vfr/abp/vfrepc86 vfrepc86@illin935!:vfrepc86> echo

我试图
echo
一个在Linux(Centos 6.3)中定义的变量。 为了访问服务器,我使用了
phpseclib2.0

使用PuTTY(或类似工具)和
vfrepc86
user访问时,我得到以下输出:

vfrepc86@illin935!:vfrepc86> echo $USER
vfrepc86
vfrepc86@illin935!:vfrepc86> pwd
/vfuser1/vfr/abp/vfrepc86
vfrepc86@illin935!:vfrepc86> echo $WL_HOME
/opt/weblogic1211_new/wlserver_12.1
当我尝试使用PHP运行相同的程序时(与同一用户连接
vfrepc86
),使用以下代码:

<?php

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('phpseclib/Net/SSH2.php');

$ssh = new Net_SSH2('illin935');
if (!$ssh->login('vfrepc86', '******')) {
    exit('Login Failed');
}

echo "---User:---";
echo "<br>";
    echo $ssh->exec('echo $USER');
echo "<br><br>";
echo "---Location of run:---";
echo "<br>";
    echo $ssh->exec('pwd');
echo "<br><br>";
echo "---Default:---";
echo "<br>";
    echo $ssh->exec('echo $WL_HOME'); //my first try, returns nothing
echo "<br><br>";
echo "---Using su:---";
echo "<br>";
    echo $ssh->exec('su - vfrepc86 -c \'echo $PATH\''); //tried with su
echo "<br><br>";
echo "---Writing to file:---";
echo "<br>";
    echo $ssh->exec('echo $WL_HOME >> temp.txt'); //tried writing to file

?>

您可以看到我无法将
$WL\u带回家
。尽管脚本是从同一路径运行的。如上所述,我也尝试过使用
su
,但返回的
标准值必须是tty
。将命令打印到文件没有帮助,因为文件变为空。

NET\u SSH2
不会请求交互式shell,因此您的
.profile
不会被执行。这就是为什么没有定义
$WM_HOME

使用PECL
ssh2
扩展代替phpseclib,它有一个请求交互式shell的函数。

两个解决方案

  • 启用PTY(
    $ssh->enablePTY()
    ),然后执行
    $ssh->exec('command')
    。更多信息:

  • 使用交互式shell。例如,
    $ssh->read(“[prompt]”)$ssh->write(“命令\n”);echo$ssh->read(“[prompt]”)。更多信息:


  • 变量集在哪里
    NET\u SSH2
    不会创建交互式登录shell,因此您的配置文件脚本不会运行。在
    .profile
    中:
    export-wlu-HOME=/opt/weblogic1211\u-new/wlserver\u 12.1
    .profile
    仅对交互式登录shell执行。SSH2没有创建登录shell。我明白了,您对实现此功能的扩展有什么建议吗?谢谢,在此期间,我使用了
    echo$ssh->exec('grep'export WL\u HOME=\'.profile')作为一个临时解决方案。嗯,否决投票是可以的,但至少有一条评论说明为什么这篇文章在写了将近一年后就被否决了。我认为这是一个写得很好、格式很好的问题。预计将有一位落选选民发表评论。。。除非否决票对我和其他用户的未来学习毫无意义。
    
    ---User:---
    vfrepc86
    
    ---Location of run:---
    /vfuser1/vfr/abp/vfrepc86 
    
    ---Default:---
    
    
    ---Using su:---
    standard in must be a tty 
    
    ---Writing to file:---