Как получить сессионную оболочку ssh с сохранением состояния программным способом? - PullRequest
6 голосов
/ 20 июля 2011

Я работаю над приложением, которое должно отправлять команды на удаленные серверы. Отправка команд достаточно проста благодаря множеству клиентских библиотек SSH.

Однако мне бы хотелось, чтобы между каждой командой было сохранено состояние оболочки (т. Е. Текущий рабочий каталог, переменные среды и т. Д.). Все клиентские библиотеки, которые я видел, не делают этого. Например, ниже приведен пример кода, который не делает то, что я хочу:

use Net::SSH::Perl;
my $server = Net::SSH::Perl->new($host);
$server->login($user, $pass);

$server->cmd('cd /var');
$server->cmd('pwd');      # I _would like_ this to output /var

Между отправкой команд будут выполняться другие задачи, поэтому объединение таких команд, как $server->cmd('cd /var; pwd'), недопустимо.

Ответы [ 2 ]

2 голосов
/ 21 июля 2011

Net :: SSH :: Expect делает то, что вы хотите, хотя способ «Expect» не совсем надежен, так как он будет анализировать выходные данные ваших команд и пытаться определить, когда появляется приглашение оболочки еще раз.

0 голосов
/ 20 июля 2011

Я не уверен, что именно вы делаете, но вы могли бы просто начать один сеанс SSH. Если вы действительно не можете этого сделать, возможно, вы можете просто использовать абсолютные пути для всего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...