使用php shell访问打印linux变量

时间:2016-03-20 09:08:53

标签: php linux centos phpseclib

我试图echo在Linux(Centos 6.3)中定义的变量。 要访问服务器,请使用phpseclib 2.0

使用PuTTY(或类似用户)访问时,使用vfrepc86用户,我获得以下输出:

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

?>

我得到以下内容:

---User:---
vfrepc86

---Location of run:---
/vfuser1/vfr/abp/vfrepc86 

---Default:---


---Using su:---
standard in must be a tty 

---Writing to file:---

您可以看到我无法获得$WL_HOME。虽然脚本是从同一条路径运行的。如上所示,我还尝试使用su,但返回standard in must be a tty。将命令打印到文件没有帮助,因为文件变空。

2 个答案:

答案 0 :(得分:0)

NET_SSH2不会请求交互式shell,因此您的.profile不会被执行。这就是$WM_HOME未定义的原因。

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

答案 1 :(得分:0)

两种解决方案。

  1. 启用PTY(switch ($service) { case 'Example Service': if ($mm == 3 || $mm == 4) { #pretend this returns false $service = '1% Off ' .$service; $on_sale = true; break; // BREAK HERE } // DON'T BREAK HERE default: $service; // ?? $on_sale = false; break; } ),然后执行$ssh->enablePTY()。更多信息:http://phpseclib.sourceforge.net/ssh/pty.html

  2. 使用交互式shell。例如。 $ssh->exec('command')。更多信息:http://phpseclib.sourceforge.net/ssh/examples.html#interactive