通过SSH运行“ sudo”


8

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

问题是远程计算机上的命令需要sudo运行。同时,脚本的要点是使用户不必多次键入密码。有没有办法避免输入密码sudo?不能在远程计算机上更改命令的权限。

Answers:


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

谢谢。有趣的是,在您发布答案之前,我的同事以与此相同的方式提出了解决方案。您是否可以添加要编辑的文件,/etc/sudoers并且还可以通过运行sudo /usr/sbin/visudo
vahidg,2010年

8
如果您知道要运行的命令,则可能不想指定所有命令。有点安全漏洞,您知道。
汤姆·奥康纳

3
@Tom O'Connor:是的,我只提供了所需的命令。为了完整起见,这里将举一个例子:%wesho ALL=NOPASSWD: /sbin/service httpd
vahidg

嗯,还算公平。:)
汤姆·奥康纳

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

编辑sudo配置:

$ sudo visudo

添加以下内容:

Defaults env_keep += SSH_AUTH_SOCK

通过更改sudo PAM设置继续:

$ sudo vi /etc/pam.d/sudo

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

auth [success=2 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys
@include common-auth
@include common-account

瞧!

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


1
您可能还需要检查一下
Andre de Miranda

1
authorized_keys必须锁定,以便只有root可以更改它-否则,您最好禁用密码。
ijk 2012年


2

Andre de Miranda的答案使用pam_ssh_agent_auth提供了一个不错的解决方案,但其中的某些部分已过时。特别是/etc/pam.d/sudo使用许多当前Linux版本时的说明。

如果您运行的是精确的Ubuntu 12.04,我实际上通过提供ppa:ppa:cpick / pam-ssh-agent-auth提供的pam_ssh_agent_auth简化了过程。

您可以通过运行以下命令安装软件包:

sudo add-apt-repository ppa:cpick/pam-ssh-agent-auth
sudo apt-get install pam-ssh-agent-auth

安装后,如果您想将此PAM模块与sudo一起使用,则必须配置sudo的设置和PAM配置,在Ubuntu 12.04 precision中,您可以通过创建以下两个文件来做到这一点:

/etc/sudoers.d/pam-ssh-agent-auth:

Defaults    env_keep+="SSH_AUTH_SOCK"

/etc/pam.d/sudo:

ent#%PAM-1.0

auth       required   pam_env.so readenv=1 user_readenv=0
auth       required   pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
auth       sufficient pam_ssh_agent_auth.so file=/etc/security/authorized_keys
@include common-auth
@include common-account
@include common-session-noninteractive

如果您使用的是厨师,可以使用以下两个位置之一的我的食谱自动执行上述过程:
https
://github.com/cpick/pam-ssh-agent-auth http://community.opscode .com / cookbooks / pam-ssh-agent-auth

本食谱的files目录包含上述/etc/pam.d/sudo/etc/sudoers.d/pam-ssh-agent-auth文件,这些文件可与Ubuntu 12.04 Precision一起使用,并且在使用其他版本/发行版时应该是一个有用的起点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.