Мне очень нравится ssh2 для php. (!)
Я тестирую с помощью ssh-ing в localhost (работает под управлением Ubuntu). Мне удалось подключиться и пройти аутентификацию с моим именем пользователя (не root), и некоторые команды (например, 'ls') возвращают некоторую информацию, которая является многообещающей.
Далее я хочу выполнить команду 'su', а затем дать пароль root.
Я не получаю сообщение об ошибке, и ресурс возвращается, но, похоже, в потоке нет данных. (Я вроде жду приглашения «Пароль:»). Я не могу аутентифицироваться напрямую с паролем root, потому что он отключен для ssh.
Как вы думаете, есть ли причина, по которой 'su' вернется с каким-нибудь текстом?
Должен ли я ожидать ответ «Пароль:»?
Вот мой код:
function changeServerPassword( $ip, $port, $sshUser, $sshPassword, $rootPassword, $newRootPassword, $newSSHPassword = false) {
// login to server using $sshUser and $sshPassword
// su as root and enter $rootPassword
// if any of the above steps fail, return with appropriate error message
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
// log in
// Do I have to make sure that port is a number?
if(!($con = ssh2_connect($ip, $port))){
echo "fail: unable to establish connection\n";
} else {
// try to authenticate with username root, password secretpassword
if(!ssh2_auth_password($con, $sshUser, $sshPassword)) {
echo "fail: unable to authenticate\n";
} else {
// alright, we're in!
echo "okay: logged in...<br />";
//
if (!($stream = ssh2_exec($con, "su"))) {
echo "fail: unable to execute command\n";
} else {
echo $stream."<br />";
// collect returning data from command
stream_set_blocking($stream, true);
echo "after stream_set_blocking<br />";
$data = "";
while ($buf = fread($stream,4096)) {
$data .= $buf;
}
echo "data len: " . strlen($data) . "<br />";
echo $data."<br />";
fclose($stream);
}
}
}
}
заимствовано у http://kevin.vanzonneveld.net/techblog/article/make_ssh_connections_with_php/
уважение.
Вывод, который я получаю:
okay: logged in...
Resource id #3
after stream_set_blocking
data len: 0
Заранее спасибо за любую помощь:)
Джо