打印具有 php shell 访问权限的 linux 变量

printing a linux variable with php shell access

我正在尝试 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 但 returns standard in must be a tty。将命令打印到文件无济于事,因为文件变空了。

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

而不是 phpseclib,使用 PECL ssh2 扩展,它有一个函数 ssh2_shell 请求交互式 shell。

两种解决方案。

  1. 启用 PTY ($ssh->enablePTY()),然后执行 $ssh->exec('command')。更多信息:http://phpseclib.sourceforge.net/ssh/pty.html

  2. 使用互动shell。例如。 $ssh->read('[prompt]'); $ssh->write("command\n"); echo $ssh->read('[prompt]');。更多信息:http://phpseclib.sourceforge.net/ssh/examples.html#interactive