2013-10-16 94 views
1
use Net::SSH::Any; 
use Data::Dumper; 

# my $ssh2 = Net::SSH::Any->new(..); 

my $cmd = "sudo -u postgres -p password perl -e 'print `whoami`'"; 
print Dumper $ssh2->capture({timeout => 15}, $cmd); 

我想sudo遠程主機上,但不要在代碼具有命令行上的明文口令像上面的想法一樣。有其他選擇嗎?避免密碼

+0

[密碼的須藤](http://serverfault.com/questions/160581/ (當然有安全隱患) – ThisSuitIsBlackNot

+0

@ThisSuitIsBlackNot tnx,但我不能改變sudo行爲 –

+0

還有'-S'開關看起來很有希望嗎? http://superuser.com/a/67766/223664 –

回答

1

如果安裝在遠程機器上的sudo是不是很老,可以通過標準輸入傳遞密碼:

print $ssh2->capture({stdin_data => "$sudo_passwd\n"}, 
        'sudo', '-Sk', 
        '-p', '', 
        '--', 
        @cmd); 
+0

再次感謝,偉大的作品:) –

1

我想我會推薦帶有命令限制和角色帳戶的SSH密鑰用於此任務。所以,角色的帳戶將有一個authorized_keys文件,將看起來有點像

command="postgres perl -e 'print `whoami`'" ssh-rsa <ssh key here> 

所以,你可以ssh到機器可用SSH密鑰,並僅執行上市命令。然後,您可以爲角色帳戶中的本地連接嘗試取消密碼,並使用SQL權限保持角色帳戶不受限制。