Como usar o ssh usando scipt, executar um comando e retornar a saída…?

0

Como claramente explicado na pergunta, por favor me dê uma opção para o ssh em uma máquina usando o script perl, execute algumas linhas de script lá e retorne a saída para a máquina de origem.

Descobri alguns documentos on-line sobre isso, mas nada parece ser informativo / claro.

Por favor ajude.

    
por kiran bbnl 09.06.2015 / 11:05

2 respostas

5

Concordo que os exemplos atuais parecem úteis, mas nem sempre funcionam! Meus exemplos anteriores estão incluídos nisso. Eu não sou especialista em Perl, mas eu juntei o seguinte e funciona para mim:

#!/usr/bin/perl -w
use strict;

use Net::SSH2;

my $ssh2 = Net::SSH2->new();
$ssh2->connect('tank') or die $!;
my $auth = $ssh2->auth_publickey(
    'oli',
    '/home/oli/.ssh/id_rsa'
);

my $chan2 = $ssh2->channel();
$chan2->blocking(1);

# This is where we send the command and read the response
$chan2->exec("uname -a\n");
print "$_" while <$chan2>;

$chan2->close;

Obviamente, você vai querer mudar o nome do host, nome de usuário e localização da sua chave RSA / DSA / etc. Além disso, você precisará da biblioteca compat para fazer isso funcionar bem no Ubuntu:

sudo apt-get install libnet-openssh-compat-perl

E finalmente - presumindo que você chame isso de script.pl - chame assim:

perl -MNet::OpenSSH::Compat=Net::SSH2 script.pl
    
por Oli 09.06.2015 / 11:17
2

Você pode sempre executar uma chamada do sistema a partir do seu script de shell. Contanto que você pode ssh a partir do shell, você não precisa instalar nada:

perl -e '$r='ssh user\@host hostname'; print "Remote host:$r"'

Se você precisar executar isso automaticamente, terá algumas opções:

  1. Faça isso de forma limpa, conforme descrito na resposta de Oli .
  2. Configure a autenticação ssh sem senha e baseada em chave .
  3. Use sshpass

    Primeiro, instale-o nos repositórios:

    sudo apt-get install sshpass
    

    Em seguida, execute isto:

    perl -e '$r='sshpass -p "password" ssh user\@host hostname'; print "Remote host:$r"'
    
por terdon 09.06.2015 / 12:14