记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

ssh 远程执行perl命令

2015-12-26 08:45
背景:
有这样一个需求,将数据预处理后导入hive,但问题是该版本hive只能使用owner账号来进行操作,而脚本控制在另一台机器上。

解决方案:
最简单的方案是SSH远程执行命令
方法一:

#!/usr/bin/perl
use strict;
use warnings;
use feature qw(say);
use Net::SSH::Perl;

#conf
my $host = "xxx";
my $user = "xxx";
my $pass = "xxx";

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

my $cmd = "/usr/bin/perl /home/xxx/Tool.pl -t logType -a date2hive";

my ($stdout,$stderr,$exit) = $ssh->cmd($cmd);


方法二:

#!/usr/bin/perl
use strict;
use warnings;
use feature qw(say);
use Net::SSH::Expect;

#conf
my $host = "xxx";
my $user = "xxx";
my $pass = "xxx";


my $ssh = Net::SSH::Expect->new (
host => $host,
password=> $pass,
user => $user,
raw_pty => 1
);

my $login_output = $ssh->login();
if ($login_output !~ /$host/) {
die "Login has failed. Login output was $login_output";
}

$ssh->send("/usr/bin/perl /home/xxx/Tool.pl -t logType -a date2hive");

my $chunk;
while ($chunk = $ssh->peek(10)) { # grabs chunks of output each 10 second
print $ssh->eat($chunk);
}
$ssh->close();

但这种方法有个问题,时间设置过短会命令执行失败

参考:
http://search.cpan.org/~schwigon/Net-SSH-Perl-1.42/lib/Net/SSH/Perl.pm
http://search.cpan.org/~bnegrao/Net-SSH-Expect-1.09/lib/Net/SSH/Expect.pod
知识来源: danqingdani.blog.163.com/blog/static/1860941952015112575237727

阅读:187110 | 评论:0 | 标签:无

想收藏或者和大家分享这篇好文章→复制链接地址

“ssh 远程执行perl命令”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云