在命令行上避免使用密码(sudo)

时间:2013-10-16 18:45:35

标签: perl unix ssh sudo

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,但不喜欢在命令行上使用普通密码的想法,就像上面的代码一样。还有其他选择吗?

2 个答案:

答案 0 :(得分:1)

我想我会推荐带有命令限制的SSH密钥和一个用于此任务的角色帐户。因此,角色帐户将有一个看起来有点像

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

因此,您可以使用ssh密钥ssh到计算机,并仅执行列出的命令。然后,您可以从角色帐户中删除本地连接尝试的密码,并使用SQL权限将角色帐户保持为受限制。

答案 1 :(得分:1)

如果远程计算机上安装的sudo不是很老,您可以通过stdin传递密码:

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