簡體   English   中英

如何使用CGI和Perl的Net :: OpenSSH模塊在遠程Linux服務器上執行系統命令?

[英]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對象(帶有userpassword等的行)的附加參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM