我想通過Perl傳遞密碼。在我的Perl腳本中,它調用SSH,但在終端被提升爲密碼時會卡住。Perl如何處理密碼提示?
我研究過使用NET :: SSH :: Perl和其他庫,但截至目前它們不是可行的選項。我只需要SSH進入機器,檢索一個文件並離開。
我想通過Perl傳遞密碼。在我的Perl腳本中,它調用SSH,但在終端被提升爲密碼時會卡住。Perl如何處理密碼提示?
我研究過使用NET :: SSH :: Perl和其他庫,但截至目前它們不是可行的選項。我只需要SSH進入機器,檢索一個文件並離開。
除了Net::SSH:Perl之外,還有Net::SSH2和Net::OpenSSH。你試過了什麼,你和他們有什麼問題?
我運行了一個系統(ssh user @ host),終端等待輸入密碼。我如何使用Perl輸入密碼以便完成登錄? – user780063 2011-06-01 19:36:39
Expect是將與/dev/tty
對話的應用程序自動化爲ssh的標準方式。
儘管如runrig已經指出的那樣,CPAN專用於SSH有幾個模塊可用。有沒有什麼特別的原因,因爲你無法使用它們?
你在告訴我Net::SSH::Perl不行嗎?當你進行連接時,你可以給你NET::SSH::Perl
你的密碼。
他們甚至給你舉個例子在頁面上:
my $ssh = Net::SSH::Perl->new("host1");
$ssh->login("user1", "pass1");
$ssh->cmd("foo");
$ssh->cmd("bar");
我基本上試過你說的,以及CPAN文檔。每當我嘗試運行腳本時,都會遇到找到Math/Pari.pm的錯誤。 – user780063 2011-06-01 20:36:08
'Math :: Pari'被列爲'Net :: SSH :: Perl'的依賴項,你能不能安裝它,或者它不能正常工作? – 2011-06-01 21:07:02
在研究我的答案時,我發現'Net :: SFTP :: Foreign'不具備'Net :: SSH :: Perl'的依賴關係,如果它正在成爲你的展示瓶頸。 – 2011-06-01 22:12:19
使用Term::ReadPassword
獲得用戶的密碼,然後使用它作爲一個選項,您選擇的SSH模塊。
由於您只需要獲取文件並離開,您可以嘗試一個SFTP模塊,如LWP
+ LWP::Protocol::sftp
或Net::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');
我沒有注意到OP只是想檢索一個文件。 SFTP ++。好決定。 – runrig 2011-06-04 17:07:20
我們真的需要看到有問題的代碼,以幫助樣品。如果您可以補充一點,請將此問題標記爲主持人注意再次打開。 – 2011-06-01 23:52:55
@Tim Post,我認爲這裏沒有太多混淆。 OP想從他的腳本中使用SSH來獲取文件。由於他只是試圖使用系統來打開連接(如在runrig的註釋中看到的那樣),當ssh等待他的密碼時,該進程掛起。我假設他不想通過大型SSH模塊的複雜性來完成他的簡單任務,這就是爲什麼我建議使用SFTP模塊的原因。我的回答解決了這些問題,我相信解決了OP問題。很難理解,這不是一個真正的問題。 – 2011-06-02 04:16:47