通过SSH运行“sudo”

我正在编写一个脚本,login到一堆远程机器上,并对它们运行一个命令。 我已经设置了密钥,所以运行脚本的用户不必input每台机器的密码,只需在脚本的开始处input密码即可。

问题是远程机器上的命令需要sudo才能运行。 同时脚本的重点是摆脱用户必须多次input密码。 有没有办法避免inputsudo的密码? 更改远程计算机上的命令权限不是一个选项。

对于sudo,您可以允许用户在不询问密码的情况下运行sudo,尝试使用man sudoers 。 您可以通过发出visudo命令来编辑文件/etc/sudoers 。 它必须是特殊的,否则文件没有被正确地重新加载。 结果行(这里取自文件本身的例子)应该是:

 ## Allows people in group wheel to run all commands # %wheel ALL=(ALL) ALL ## Same thing without a password %wheel ALL=(ALL) NOPASSWD: ALL 

@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 

编辑sudoconfiguration:

 $ 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没有auth,但依靠SSH代理来执行强authentication,而不是简单地从sudoconfiguration中删除密码。

Andre de Miranda的答案使用pam_ssh_agent_auth提供了一个很好的解决scheme,但是零件已经过期。 尤其是使用许多当前Linux版本时的/etc/pam.d/sudo指令。

如果你正在运行Ubuntu 12.04,我实际上已经通过提供ppa: ppa:cpick / pam-ssh-agent-auth提供了一个pam_ssh_agent_auth构build来简化了这个过程。

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

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

安装完成后,如果你想用sudo来使用这个PAM模块,你必须在Ubuntu 12.04中configurationsudo的设置和PAMconfiguration,具体做法是创build以下两个文件:

/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 

如果您使用的是厨师,则可以在以下两个位置中的任一位置find我的食谱来自动执行上述过程:
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一起使用是精确的,在使用其他版本/发行版。