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在远程主机上,但不喜欢像上面的代码那样在命令行上使用纯密码的想法。有替代方案吗?

4

2 回答 2

1

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

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

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

于 2013-10-16T19:15:49.587 回答
1

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

print $ssh2->capture({stdin_data => "$sudo_passwd\n"},
                     'sudo', '-Sk',
                     '-p', '',
                     '--',
                     @cmd);
于 2013-10-17T11:09:57.513 回答