我正在编写一个脚本,用于登录到一堆远程机器并在它们上运行命令。我已经设置了密钥,因此运行脚本的用户不必输入每台机器的密码,而只需在脚本的开头输入密码。
问题是远程机器上的命令需要sudo
运行。同时,脚本的全部意义在于让用户不必多次输入密码。有没有办法避免输入密码sudo
?更改远程计算机上命令的权限不是一个选项。
对于 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)
@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 配置中删除密码。