[英]How to execute a system command on a remote Linux server using CGI and Perl's Net::OpenSSH module?
編輯:首先閱讀:我在這里嘗試做的是極端隧道視覺的結果,這篇文章可能很有趣,但沒有提供信息。 您不需要通過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連接:無法建立目標主機的真實性; 遠程主機公鑰可能不存在於opensshtest.pl第13行的'〜/ .shh / known_hosts'文件中。
我根本沒有使用SSH密鑰,我正在嘗試通過將它們硬編碼到腳本中來提供用戶名和密碼。
此外,在瀏覽器中打開時,它僅打印出第一個TEST
。
任何幫助,將不勝感激。
發表這個問題的那個人又是我了。 有趣的是我花了好幾個小時試圖完成這項工作,並且在這里發布問題后一小時偶然發現了一個解決方案。 但這里是:
我添加了master_opts => [-o => "StrictKeyChecking=no"]
作為創建Net :: OpenSSH對象(帶有user
, password
等的行)的附加參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.