编辑:首先阅读:我在这里尝试做的是极端隧道视觉的结果,这篇文章可能很有趣,但没有提供信息。您不需要通过SSH连接到自己的服务器来执行命令,我甚至在想什么......
标题几乎说明了一切。我想在Linux服务器(Debian,如果重要)上托管CGI网站,当点击按钮时,在服务器上执行系统命令。我是通过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密钥,我试图通过将用户名和密码硬编码到脚本中来提供用户名和密码。
此外,在浏览器中打开时,它只打印出第一个TEST
。
任何帮助都将不胜感激。
答案 0 :(得分:0)
再一次,发布这个问题的人。我花了好几个小时试图完成这项工作很有趣,并且在这里发布问题后一小时偶然发现了一个解决方案。但这是:
我已添加user
作为创建Net :: OpenSSH对象的附加参数(带有password
,-Wait
的行等)。