首页 > 解决方案 > 在 SSH 终端中执行的命令显示额外的行内容

问题描述

使用 Net::SSH::Expect perl 模块我尝试连接到服务器并且连接成功。但是当它在连接的服务器中执行命令并在当前窗口中显示输出时,它会显示额外的输出行。

下面是我的代码

#!/usr/bin/perl 

use Net::SSH::Expect;

my $ssh = Net::SSH::Expect->new (
    host => 'hostip', #deb-2-scripting ip
    user => 'user',
    password => 'password',
    raw_pty => 1
);

$ssh->run_ssh() or die "SSH process couldn't start: $!";


$ssh->waitfor('password: ');

$ssh->send("password");

$ssh->exec("stty -echo");

my $hostname = $ssh->exec('hostname');
print "HOST:$hostname\n";

$ssh->close();

输出如下:

[vinod@deb-3-serv1 TEST_DIR]$ perl test_ssh.pl
HOST:deb-2-scripting
[user@deb-2-scripting(Host) ~]$

当我执行时,我希望输出应该显示如下test_ssh.pl

HOST:deb-2-scripting

不应该打印最后一行,这显示在我上面的输出结果中。

标签: perlssh

解决方案


no_terminal => 1选项传递给构造函数。

my $ssh = Net::SSH::Expect->new (
    host => 'hostip', #deb-2-scripting ip
    user => 'user',
    password => 'password',
    raw_pty => 1,
    no_terminal => 1,
);

这将阻止 ssh 服务器分配伪 tty,并且远程 shell 在不在 tty 中运行时不应打印提示。


推荐阅读