打印具有 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。
两种解决方案。
启用 PTY ($ssh->enablePTY()
),然后执行 $ssh->exec('command')
。更多信息:http://phpseclib.sourceforge.net/ssh/pty.html
使用互动shell。例如。 $ssh->read('[prompt]'); $ssh->write("command\n"); echo $ssh->read('[prompt]');
。更多信息:http://phpseclib.sourceforge.net/ssh/examples.html#interactive
我正在尝试 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。
两种解决方案。
启用 PTY (
$ssh->enablePTY()
),然后执行$ssh->exec('command')
。更多信息:http://phpseclib.sourceforge.net/ssh/pty.html使用互动shell。例如。
$ssh->read('[prompt]'); $ssh->write("command\n"); echo $ssh->read('[prompt]');
。更多信息:http://phpseclib.sourceforge.net/ssh/examples.html#interactive