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 :(得分: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);