通过 SSH 运行“sudo”

vah*_*idg 8 ssh sudo

我正在编写一个脚本,用于登录到一堆远程机器并在它们上运行命令。我已经设置了密钥,因此运行脚本的用户不必输入每台机器的密码,而只需在脚本的开头输入密码。

问题是远程机器上的命令需要sudo运行。同时,脚本的全部意义在于让用户不必多次输入密码。有没有办法避免输入密码sudo?更改远程计算机上命令的权限不是一个选项。

DaD*_*Dom 8

对于 sudo,您可以允许用户在不要求密码的情况下运行 sudo,请尝试man sudoers。您可以/etc/sudoers通过发出visudo命令来编辑文件。它必须如此特别,否则文件将无法正确重新加载。结果行(此处取自文件本身的示例)应为:

## Allows people in group wheel to run all commands
# %wheel    ALL=(ALL)   ALL

## Same thing without a password
%wheel  ALL=(ALL)   NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)

  • 如果您知道要运行的命令,则您可能不想指定所有命令.. 有点安全漏洞,您知道。 (8认同)
  • @Tom O'Connor:是的,我只提供了所需的命令。为了完整起见,将在此处放一个示例:`%wesho ALL=NOPASSWD: /sbin/service httpd` (3认同)

And*_*nda 7

@Wesho,

您可以按照 DaDaDom 所说的去做(它会起作用并且很简单),或者您可能想要使用名为pam-ssh-agent-auth的 PAM 模块来加强您的设置。

Debian/Ubuntu 系统的过程相当简单:

$ sudo aptitude install libssl-dev libpam0g-dev build-essential checkinstall
$ wget "http://downloads.sourceforge.net/project/pamsshagentauth/pam_ssh_agent_auth/v0.9.3/pam_ssh_agent_auth-0.9.3.tar.bz2"
$ tar -xjvf pam_ssh_agent_auth-0.9.3.tar.bz2
$ cd pam_ssh_agent_auth-0.9.3

$ ./configure --libexecdir=/lib/security --with-mantype=man

$ make
$ sudo checkinstall
Run Code Online (Sandbox Code Playgroud)

编辑 sudo 配置:

$ sudo visudo
Run Code Online (Sandbox Code Playgroud)

添加以下内容:

Defaults env_keep += SSH_AUTH_SOCK
Run Code Online (Sandbox Code Playgroud)

继续更改 sudo PAM 设置:

$ sudo vi /etc/pam.d/sudo
Run Code Online (Sandbox Code Playgroud)

在 2 个现有的@include行上方添加auth行:

auth [success=2 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys
@include common-auth
@include common-account
Run Code Online (Sandbox Code Playgroud)

瞧!

sudo 没有身份验证,但依靠 SSH 代理执行强身份验证,而不是简单地从 sudo 配置中删除密码。