【问题标题】:Avoiding password on command line (sudo)避免在命令行上输入密码 (sudo)
【发布时间】:2013-10-16 18:45:35
【问题描述】:
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,但不喜欢在命令行上像上面​​的代码那样使用纯密码。有其他选择吗?

【问题讨论】:

标签: perl unix ssh sudo


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 2011-03-22
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多