我正在编写一个脚本,用于登录一组远程计算机并在这些计算机上运行命令。我已设置密钥,这样运行脚本的用户就不必输入每台计算机的密码,而只需在脚本开头输入密码即可。
问题是远程机器上的命令需要sudo
运行。同时,脚本的整个目的是让用户不必多次输入密码。有没有办法避免输入密码sudo
?更改远程机器上命令的权限不是一个选项。
答案1
对于 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
答案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
文件,并且在使用其他版本/发行版时应该是一个有用的起点。