我试图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
。将命令打印到文件没有帮助,因为文件变空。
答案 0 :(得分:0)
NET_SSH2
不会请求交互式shell,因此您的.profile
不会被执行。这就是$WM_HOME
未定义的原因。
使用PECL phpseclib
扩展名代替ssh2
,它有一个请求交互式shell的函数ssh2_shell
。
答案 1 :(得分:0)
两种解决方案。
启用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
使用交互式shell。例如。 $ssh->exec('command')
。更多信息:http://phpseclib.sourceforge.net/ssh/examples.html#interactive