LINUX.ORG.RU

php - ssh через phpseclib

 , phpseclib,


0

1

Привет!

Посоветуйте, пожалуйста, что в php использовать для коннекта по ssh?

Сейчас пытаюсь осилить phpseclib, но дальше простейших exec'ов у меня дело не идет - постоянно скрипт вешается, а с ним и весь веб-сервер, в логах полезного найти ничего не смог - скорее всего косячу где-то, но почему он не «отваливается» а продолжает выполнение? Или, может, использовать php'шный exec, а в нем уже привычный ssh? И, да, как на phpseclib устроить интерактивный shell я так и не понял - залогиниться под другим пользователем или в папку перейти, например. Прошу советов!!

★★★★★
Ответ на: комментарий от Wolfram

Я так и не смог ответ получить нормальный - ради whoami на локалхосте там предлагается городить 40строчный скрипт, а иначе он какие-то потоки выдает. Покажи простой пример, пожалуйста!

alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от alozovskoy

Вроде что-то готовое у меня быть на эту тему, но посмотреть смогу только завтра.

ради whoami на локалхосте там предлагается городить 40строчный скрипт

Вроде там все просто было.

Wolfram
()
Ответ на: комментарий от Wolfram

Будь добр!

У меня на выходе «Resource id #3» и подобное, понимаю что это потоки, но не могу нагуглить как их читать корректно, всякие stream_get_contents не помогают.

alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от alozovskoy
 $con = ssh2_connect("$ip", 22) or print("Can't connect to $ip");
 if(ssh2_auth_password($con, "$login", "$password")) {
  $stream = ssh2_exec($con,"ps -e|grep $process|wc -l");
  stream_set_blocking($stream,true);
  $data = '';
  while($buf = fread($stream,4096)) {
     $data .= $buf;
  }
  echo $data;
 }
snoopcat ★★★★★
()
Ответ на: комментарий от alozovskoy

я уже не помню, что читал, коду год с лишним

snoopcat ★★★★★
()
Ответ на: комментарий от snoopcat

А как сделать интерактивно?

$con = ssh2_connect("$ip", 22) or print("Can't connect to $ip");
 if(ssh2_auth_password($con, "$login", "$password")) {
  $shell = ssh2_shell($con, 'xterm');
fwrite( $shell, "cd /\n");
fwrite( $shell, "pwd\n");
fwrite( $shell, "cd /var\n");
fwrite( $shell, "pwd\n");
 
stream_set_blocking($shell, true);
while($line = fgets($shell)) {
        flush();
        echo $line;
};
fclose($shell);
 };

Это виснет, не пойму в чем причина.

alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от alozovskoy
<?php

function ssh_login($ip, $port, $user, $password) {
	if(!$conn = ssh2_connect("$ip", $port)) return("Can't connect to $ip");
	if(!ssh2_auth_password($conn, "$user", "$password")) return("Can't auth with $user, $password");
	return $conn;
}

function ssh_exec($link, $cmd) {
	$stream = ssh2_exec($link,"$cmd");
	stream_set_blocking($stream,true);
	$data = '';
	while($buf = fread($stream,4096)) {
    	    	$data .= $buf;
  	}
  	return $data;
}

$link = ssh_login("localhost", 22, "root", "verysecretpassword");
$result = ssh_exec($link, "ls -la");
echo $result;

?>

snoopcat ★★★★★
()
Последнее исправление: snoopcat (всего исправлений: 2)
Ответ на: комментарий от snoopcat

Не, как мне, например, зайти на сервер, там sudo (ну например), а уже из под пользователя которым я залогинился в sudo выполнить команду? То есть как быть с случаями наподобие такого, когда нужно выполнить что-то в новом shell'е?

alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от alozovskoy

выкинь php и используй puppet/chef/ansible для таких целей.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.