Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
终端上Perl打印输出中的反勾号_Perl - Fatal编程技术网

终端上Perl打印输出中的反勾号

终端上Perl打印输出中的反勾号,perl,Perl,我试图在一个变量中获取命令的输出,并检查它是否与其他变量匹配 $login1=`ssh ****************** date`; 手动键入此命令时,需要提示密码:。当我从脚本运行它时,它正在运行该命令并打印等待用户输入的提示,但我不需要它。我只需要得到输出并进行比较 if($login1=~ /Password:/) { print " yes"; } else

我试图在一个变量中获取命令的输出,并检查它是否与其他变量匹配

   $login1=`ssh ****************** date`;
手动键入此命令时,需要提示密码:。当我从脚本运行它时,它正在运行该命令并打印等待用户输入的提示,但我不需要它。我只需要得到输出并进行比较

     if($login1=~ /Password:/)
            {   
              print " yes";
            }
         else
              {
                print "No ";
               }

但是,脚本只是在密码提示下停止。请就如何实现这一点向我提出建议。

您可能希望查看ssh的-f标志:

如果要避免使用密码,请设置一个公钥/私钥对,该对没有密码短语危险,但比在脚本中输入密码并将公钥复制到远程站点危险得多。IIRC,是这样的:

localhost $ ssh-keygen -b 2048 -t ecdsa -N '' -f ./datekey
localhost $ scp ./datekey.pub remotehost:/tmp
localhost $ ssh remotehost
(login)
remotehost $ cat /tmp/datekey.pub >> ~/.ssh/authorized_keys
remotehost $ logout

localhost $ ssh -i ./datekey remotehost date
确保将./datekey存储在任何其他用户都无法访问的位置,甚至连读取权限都无法访问

如果您只是想检测,您可能只需要给它输入EOF,让它继续运行:

$login1=`ssh ****************** date < /dev/null`;

这是ssh阻止用户输入。你到底想在这里实现什么?它正在停止,因为Password:不是一个带行尾的完整行,所以它仍在等待行尾。我只想捕获命令输出。我不想寄任何东西到那里。但它正在我的屏幕上打印。我只想获得它的输出,比较它的密码或其他东西。是的,ssh正在阻止用户输入,我只想检查它是否被阻止,仅此而已。。如果它被阻塞,我必须打印yes else No.Net::SSH::Expect将是执行此操作的最佳方法,因为使用SSH会使shell具有交互性,并启动远程会话tty。否,请参阅我上面的评论。我不应该更改该命令中的任何内容。我使用了/dev/null。但它不是在移动,而是在屏幕上打印密码。我认为它是直接在终端上打印而不是捕获密码。那么如何做到这一点呢。请建议您也可以使用ssh-o BatchMode yes,而不是使用$login1=`ssh ****************** date < /dev/null`;