Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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
如何使用CGI和Perl在远程Linux服务器上执行系统命令';OpenSSH模块?_Linux_Perl_Ssh - Fatal编程技术网

如何使用CGI和Perl在远程Linux服务器上执行系统命令';OpenSSH模块?

如何使用CGI和Perl在远程Linux服务器上执行系统命令';OpenSSH模块?,linux,perl,ssh,Linux,Perl,Ssh,编辑:先读这篇文章:我在这里试图做的是极端的隧道设想的结果,这篇文章可能很有趣,但没有提供信息。您不需要SSH到您自己的服务器来执行命令,我甚至在想什么 标题几乎说明了一切。我想在Linux服务器上托管一个CGI网站(Debian,如果有必要的话),当单击一个按钮时,在服务器上执行一个系统命令。我是通过Perl实现的,它是Net::OpenSSH模块 问题就在这里。我可以通过服务器本身上的终端运行脚本,但前提是使用sudo。命令是否只是“ls”并不重要。毫不奇怪,当点击网站上调用该模块的按钮时,

编辑:先读这篇文章:我在这里试图做的是极端的隧道设想的结果,这篇文章可能很有趣,但没有提供信息。您不需要SSH到您自己的服务器来执行命令,我甚至在想什么

标题几乎说明了一切。我想在Linux服务器上托管一个CGI网站(Debian,如果有必要的话),当单击一个按钮时,在服务器上执行一个系统命令。我是通过Perl实现的,它是
Net::OpenSSH
模块

问题就在这里。我可以通过服务器本身上的终端运行脚本,但前提是使用sudo。命令是否只是“
ls
”并不重要。毫不奇怪,当点击网站上调用该模块的按钮时,它也不起作用

这是我的密码:

#!/usr/bin/perl
use strict;
use warnings;
use Net::OpenSSH;

print("Content-type: text/html\n\n");

print("TEST");

my $ssh = Net::OpenSSH->new('localhost', user => 'myusername', password => 'mypassword');

$ssh->system("ls") or die "ERROR: " . $ssh->error;

print("TEST2");
当使用sudo在终端中运行它时,脚本打印出
TEST
,然后列出我的主目录中的文件夹(桌面、文档等),最后是
TEST2

当我不使用sudo时,它只打印
TEST
,然后显示此错误消息:

错误:无法建立主SSH连接:的真实性 无法建立目标主机;远程主机公钥为 可能不在位于的“~/.shh/known_hosts”文件中 opensshtest.pl第13行

我根本没有使用SSH密钥,我试图通过将用户名和密码硬编码到脚本中来提供它们

此外,当在浏览器中打开时,它只打印出第一个
测试


任何帮助都将不胜感激。

又是我,发布问题的人。有趣的是,我花了几个小时试图让这项工作成功,在这里发布问题一个小时后偶然发现了一个解决方案。但这是:


我已经添加了
master\u opts=>[-o=>“StrictKeyChecking=no”]
作为创建Net::OpenSSH对象的附加参数(包含
user
password
等的行)。

又是我,发布问题的人。有趣的是,我花了几个小时试图让这项工作成功,在这里发布问题一个小时后偶然发现了一个解决方案。但这是:


我已经添加了
master\u opts=>[-o=>“StrictKeyChecking=no”]
作为创建Net::OpenSSH对象的附加参数(包含
user
password
等的行)。

我忘记添加这个:它说错误在第13行。实际上是第12行,因为这段代码没有另外一行被注释掉。我很困惑。为什么宋承宪会参与进来?事实上,这是一个很好的问题。答案是,;我的困惑状态和谷歌搜索技巧让我做到了这一点。我记得从Perl的
exec()开始函数,没有任何成功,其余的都不清楚。但是,嘿,我已经成功了,如果您感兴趣,请参见下面的内容:“exec函数执行一个系统命令并且从不返回;如果您希望它返回,请使用system而不是exec。”这可能就是问题所在。IIRC,当从浏览器运行CGI时,它会挂起,好像加载站点时遇到问题。讨论使用ssh的迂回方式。。。感谢您指出这一点,我将使用
system()再试一次。我忘了添加这个:它说错误在第13行。实际上是第12行,因为这段代码没有另外一行被注释掉。我很困惑。为什么宋承宪会参与进来?事实上,这是一个很好的问题。答案是,;我的困惑状态和谷歌搜索技巧让我做到了这一点。我记得从Perl的
exec()开始函数,没有任何成功,其余的都不清楚。但是,嘿,我已经成功了,如果您感兴趣,请参见下面的内容:“exec函数执行一个系统命令并且从不返回;如果您希望它返回,请使用system而不是exec。”这可能就是问题所在。IIRC,当从浏览器运行CGI时,它会挂起,好像加载站点时遇到问题。讨论使用ssh的迂回方式。。。感谢您指出这一点,我将使用
system()再试一次。哦,顺便说一句,我在运行代码一次后删除了那行代码,它仍然有效。使用该行运行代码在服务器上实现了一些SSH密钥黑魔法(我对此仍然很陌生)。模块文档中的部分试图解释这一点,特别是这一点。哦,顺便说一下,我在运行代码一次后删除了该行,它仍然有效。使用该行运行代码在服务器上实现了一些SSH密钥黑魔法(我对这一点仍然很陌生)。