2016-03-20 3 views
-1

Я пытаюсь использовать echo переменную, определенную в Linux (Centos 6.3). Для доступа к серверу я использую phpseclib 2.0.печать переменной linux с доступом к оболочке php

При обращении с помощью PuTTY (или аналогичный), с vfrepc86 пользователя, я получаю следующий вывод:

[email protected]!:vfrepc86> echo $USER 
vfrepc86 
[email protected]!:vfrepc86> pwd 
/vfuser1/vfr/abp/vfrepc86 
[email protected]!: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 не запрашивает интерактивную оболочку, поэтому ваш .profile не выполняется. Вот почему $WM_HOME не определен.

Вместо phpseclib используйте расширение PECL ssh2, оно имеет функцию ssh2_shell, которая запрашивает интерактивную оболочку.

+0

Где этот набор переменных? 'NET_SSH2' не создает интерактивную оболочку входа, поэтому ваш скрипт профиля не запускается. – Barmar

+0

В '.profile':' export WL_HOME =/opt/weblogic1211_new/wlserver_12.1' –

+0

'.profile' выполняется только для интерактивных оболочек входа. SSH2 не создает оболочку входа. – Barmar

0

Два решения.

  1. Включение PTY ($ssh->enablePTY()), а затем сделать $ssh->exec('command'). Дополнительная информация: http://phpseclib.sourceforge.net/ssh/pty.html

  2. Используйте интерактивную оболочку. например. $ssh->read('[prompt]'); $ssh->write("command\n"); echo $ssh->read('[prompt]');. Больше информации: http://phpseclib.sourceforge.net/ssh/examples.html#interactive

 Смежные вопросы

  • Нет связанных вопросов^_^