2011-06-01 88 views
0

我想通過Perl傳遞密碼。在我的Perl腳本中,它調用SSH,但在終端被提升爲密碼時會卡住。Perl如何處理密碼提示?

我研究過使用NET :: SSH :: Perl和其他庫,但截至目前它們不是可行的選項。我只需要SSH進入機器,檢索一個文件並離開。

+0

我們真的需要看到有問題的代碼,以幫助樣品。如果您可以補充一點,請將此問題標記爲主持人注意再次打開。 – 2011-06-01 23:52:55

+1

@Tim Post,我認爲這裏沒有太多混淆。 OP想從他的腳本中使用SSH來獲取文件。由於他只是試圖使用系統來打開連接(如在runrig的註釋中看到的那樣),當ssh等待他的密碼時,該進程掛起。我假設他不想通過大型SSH模塊的複雜性來完成他的簡單任務,這就是爲什麼我建議使用SFTP模塊的原因。我的回答解決了這些問題,我相信解決了OP問題。很難理解,這不是一個真正的問題。 – 2011-06-02 04:16:47

回答

3

除了Net::SSH:Perl之外,還有Net::SSH2Net::OpenSSH。你試過了什麼,你和他們有什麼問題?

+0

我運行了一個系統(ssh user @ host),終端等待輸入密碼。我如何使用Perl輸入密碼以便完成登錄? – user780063 2011-06-01 19:36:39

2

Expect是將與/dev/tty對話的應用程序自動化爲ssh的標準方式。

儘管如runrig已經指出的那樣,CPAN專用於SSH有幾個模塊可用。有沒有什麼特別的原因,因爲你無法使用它們?

2

你在告訴我Net::SSH::Perl不行嗎?當你進行連接時,你可以給你NET::SSH::Perl你的密碼。

他們甚至給你舉個例子在頁面上:

my $ssh = Net::SSH::Perl->new("host1"); 
$ssh->login("user1", "pass1"); 

$ssh->cmd("foo"); 
$ssh->cmd("bar"); 
+0

我基本上試過你說的,以及CPAN文檔。每當我嘗試運行腳本時,都會遇到找到Math/Pari.pm的錯誤。 – user780063 2011-06-01 20:36:08

+0

'Math :: Pari'被列爲'Net :: SSH :: Perl'的依賴項,你能不能安裝它,或者它不能正常工作? – 2011-06-01 21:07:02

+1

在研究我的答案時,我發現'Net :: SFTP :: Foreign'不具備'Net :: SSH :: Perl'的依賴關係,如果它正在成爲你的展示瓶頸。 – 2011-06-01 22:12:19

2

使用Term::ReadPassword獲得用戶的密碼,然後使用它作爲一個選項,您選擇的SSH模塊。

由於您只需要獲取文件並離開,您可以嘗試一個SFTP模塊,如LWP + LWP::Protocol::sftpNet::SFTP::Foriegn

下面是使用Net::SFTP::Foreign一個例子(其中也有少數依賴):

#!/usr/bin/perl 
use strict; 
use warnings; 

use Term::ReadPassword; 
use Net::SFTP::Foreign; 

my $pass = read_password("Enter Password: "); 
my %opts = (
    host => "my.host.com", 
    user => "me", 
    password => $pass, 
); 

my $sftp = Net::SFTP::Foreign->new(%opts); 

$sftp->get('/home/me/path/to/file', 'local_file'); 
+0

我沒有注意到OP只是想檢索一個文件。 SFTP ++。好決定。 – runrig 2011-06-04 17:07:20