在 OpenSSH 中重定向调试输出

Posted

技术标签:

【中文标题】在 OpenSSH 中重定向调试输出【英文标题】:Redirect debugging output in OpenSSH 【发布时间】:2018-12-03 19:03:17 【问题描述】:

我正在开发一个通过 OpenSSH 运行交互式命令的程序,但我不知道如何将调试输出重定向到 debug.txt。

这是代码:

#!/usr/bin/perl

use strict;                                                 
use Net::OpenSSH;

my ($u_name, $acc_name, $acc_uid);

print "Enter account ID: ";
$acc_uid = <STDIN>;
chomp ($acc_uid);

print "Login as: ";
$u_name = <STDIN>;
chomp ($u_name);

my $createuser = "sudo useradd $acc_uid";

system ("clear");

BEGIN  
    open (my $out, '>>', '/usr/local/debug.txt') or warn $!;
    $Net::OpenSSH::debug_fh = $out;
    $Net::OpenSSH::debug = 16;
  

my $ssh = Net::OpenSSH->new( "$u_name\@myserver", strict_mode => 0);

$ssh->system(tty => 1 , "$createuser") 
                or die "remote command failed: " . $ssh->error;         

我在Net::OpenSSH 中找到了 Net::OpenSSH::debug 的代码,这是程序的输出:

Enter account ID: usertest
Login as: testuser
# open_ex: ['ssh','-V']
# _waitpid(711) => pid: 711, rc:
testuser@myserver's password:
# open_ex: ['ssh','-O','check','-T','-S','/root/.libnet-openssh-perl/testuser-myserver-344-438107','-l','testuser','myserver','--']
# _waitpid(349) => pid: 349, rc:
# open_ex: ['ssh','-qtt','-S','/root/.libnet-openssh-perl/testuser-myserver-344-438107','-l','testuser','myserver','--','sudo useradd testuser123']
[sudo] password for testuser:
# _waitpid(350) => pid: 350, rc:
# open_ex: ['ssh','-O','exit','-T','-S','/root/.libnet-openssh-perl/testuser-myserver-344-438107','-l','testuser','myserver','--']
# _waitpid(351) => pid: 351, rc:

当我检查 debug.txt 时,它是空的。谢谢!

【问题讨论】:

那么,你的问题是什么? @salva 我编辑了我的问题。对不起,我忘了包括这个问题。感谢您指出。 请发minimal reproducible example。 以文字形式发布文字,而不是文字图片。 “这是程序的输出”到底是什么意思?你是如何运行它的?这是打印到控制台的内容吗?您是否检查过它是否是标准输出/标准错误/其他?剩下的代码在哪里? @melpomene 我已经包含了完整的代码及其输出。谢谢 【参考方案1】:

你说:

版本是0.62。

正如changelog 解释的那样:

0.66 2015 年 10 月 11 日

文档修复(由 Alex Kok 报告) 允许将调试输出重定向到自定义文件句柄

$Net::OpenSSH::debug_fh 仅在 Net::OpenSSH 0.66+ 中受支持。在旧版本中,它始终记录到 STDERR

【讨论】:

我没看到。现在完美运行。谢谢!

以上是关于在 OpenSSH 中重定向调试输出的主要内容,如果未能解决你的问题,请参考以下文章

在win32中重定向标准输出不会重定向标准输出

在 Bash 中重定向标准错误和标准输出 [重复]

如何在 C# 中重定向 IronPython 的标准输出?

在C中重定向子进程的文件输出

如何在C#中重定向IronPython的标准输出?

Linux中重定向管道和grep命令总结