perl - 在 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
不应该打印最后一行,这显示在我上面的输出结果中。
解决方案
将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 中运行时不应打印提示。
推荐阅读
- python - 在 python 中从 Excel 转换为 CSV 时排除工作表
- javascript - PHP登录算法未重定向到下一页(不确定连接到数据库)
- linux - 构建glibc时“制作共享对象时无法使用”
- java - 将字符串 ["Scenario 1", "Scenario 2"] 转换为数组
- abap - 通过 CALL METHOD cmd_ei_api=>maintain_bapi 在 XD02 添加新的电子邮件客户
- python - 上次文件修改时间返回自 DST 更改以来一年的偏移量
- php - 将 guzzle 代码从 guzzle 5 更改为 guzzle 6 时面临错误
- javascript - 在Ext Js中应用菜单过滤器时如何删除网格列标题突出显示(粗体+下划线)?
- javascript - Arcgis js 4.11:如何将底图图层添加到底图库
- html - 主题颜色元标记不适用于特定颜色