Estoy trabajando en una aplicación que necesita enviar comandos a servidores remotos. Enviar comandos es bastante fácil con la gran cantidad de bibliotecas de cliente SSH.¿Cómo obtener Stateful ssh shell sesión programáticamente?
Sin embargo, me gustaría conservar el estado del shell (es decir, el directorio de trabajo actual, las variables de entorno, etc.) entre cada comando. Todas las bibliotecas cliente que he visto no hacen esto. Por ejemplo, el siguiente es un ejemplo de código que no no hacer lo que quiera:
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
Habrá otras tareas llevadas a cabo entre el envío de comandos, por lo que la combinación de los comandos como $server->cmd('cd /var; pwd')
no es aceptable.
Está bien siempre y cuando solo ejecute comandos que sepa cómo analizar la salida de. – Joshua
@Joshua: bueno, descubrí más tarde que Net :: SSH :: Expect no utiliza ninguna lógica para averiguar cuándo se realiza el comando. Simplemente tiene un tiempo de espera (personalizable) y asume que el comando finaliza cuando termina el tiempo de espera. ¡Completamente poco confiable! – salva
EWWW. Puede ser mejor que escribir la maldita cosa de esperar directamente entonces. – Joshua