2013-10-16 98 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权限保持角色帐户不受限制。