通过 SSH 运行“sudo”

通过 SSH 运行“sudo”

我正在编写一个脚本,用于登录一组远程计算机并在这些计算机上运行命令。我已设置密钥,这样运行脚本的用户就不必输入每台计算机的密码,而只需在脚本开头输入密码即可。

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

答案1

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

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

## Same thing without a password
%wheel  ALL=(ALL)   NOPASSWD: ALL

答案2

@Wesho,

您可以按照 DaDaDom 所说的去做(它会起作用而且很简单),或者您可能希望通过使用名为的 PAM 模块来增强您的设置pam-ssh-代理认证

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 条线上方@包括行:

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

瞧!

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

答案3

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

如果您运行的是 Ubuntu 12.04 precise,我实际上通过提供 ppa 中的 pam_ssh_agent_auth 构建简化了该过程:ppa:cpick/pam-ssh-代理-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 中,您可以通过创建以下两个文件来完成此操作:

/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

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

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

相关内容