【问题标题】:From a script, run a script on a remote server and get its output从脚本,在远程服务器上运行脚本并获取其输出
【发布时间】:2018-01-15 22:32:37
【问题描述】:

我正在执行一个 Perl 脚本。我必须通过 SSH 连接到远程服务器并执行 python 脚本。下面是我在 perl 脚本中执行的代码行。我知道执行 python 脚本的选项很少,例如反引号和系统命令,但我在远程服务器中有脚本,我不能使用系统或反引号命令,因为它不是本地机器。我想要在运行时通过 SSH 执行的命令的输出。

   my $ssh = new Net::SSH::Expect();
    $ssh->login_username($server_login);
    $ssh->server($server_name);
    $ssh->login();
    my $home_directory= $ssh->pwd;

my $command=qq(/home/feroz/MyScript.py $ARG0 $ARG1 $ARG2 $ARG3 1)
    print "\n-------- BEGIN SCRIPT OUTPUT ----------\n";
    $ssh->exec($command)){

    print "\n -------- END SCRIPT OUTPUT ----------";

【问题讨论】:

  • SSH::Expect 不是 CPAN 上的模块。这是自定义模块还是您输入错误 Net::SSH::Expect
  • Yes Net::SSH 抱歉打错了
  • Net::SSH::Expect 的文档没有提到login_username,但它确实声明$command 的输出是从->exec 返回的。那么您是否尝试过简单的print $ssh->exec($command);
  • 我也试过了,但没有成功
  • @ferozalam_82 请参阅What should I do when someone answers my question?。如果有问题的答案或问题,请提供反馈。

标签: perl ssh


【解决方案1】:

请参阅Net::SSH::Expect 文档。你没有正确使用它

use warnings;
use strict;
use Net::SSH::Expect;

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

my $greeting = $ssh->login();  # or $ssh->run_ssh(), if without password
print $greeting;

# Disable terminal translations and echo on the SSH server
$ssh->exec("stty raw -echo");

my $cmd = q( ... );

my $cmd_output = $ssh->exec($cmd);

print $cmd_output, "\n";

exec 方法是获取命令输出的方法之一。其他一些是read_linepeekeat,还有其他与命令交互的方式。

请添加检查以查看登录是否首先有效。

这可以完成很多工作,并且涉及复杂性。请阅读文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    相关资源
    最近更新 更多