web-dev-qa-db-ja.com

SSH経由で「Sudo」を実行

多数のリモートマシンにログオンしてコマンドを実行するスクリプトを作成しています。スクリプトを実行しているユーザーが各マシンのパスワードを入力する必要がなく、スクリプトの最初にパスフレーズを入力するだけで済むように、キーを設定しました。

問題は、リモートマシンでのコマンドの実行にSudoが必要なことです。同時に、スクリプトの要点は、ユーザーがパスワードを複数回入力する必要がないようにすることです。 Sudoのパスワードを入力しないようにする方法はありますか?リモートマシンでコマンドの権限を変更することはできません。

8
vahidg

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
8
DaDaDom

@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

SudoPAM設定を変更して続行します。

$ Sudo vi /etc/pam.d/Sudo

auth行を既存の2つの@ include行のすぐ上に追加します。

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

Voilà!

認証なしのSudoですが、Sudo構成からパスワードを削除するだけでなく、SSHエージェントに依存して強力な認証を実行します。

7

Andre de Mirandaの回答は、 pam_ssh_agent_auth を使用した優れたソリューションを提供しますが、パーツが古くなっています。特に/etc/pam.d/Sudo現在の多くのLinuxバージョンを使用する場合の手順。

Ubuntu 12.04を正確に実行している場合は、ppaからpam_ssh_agent_authビルドを提供することでプロセスを実際に簡略化しました: ppa:cpick/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構成を構成する必要があります。Ubuntu12.04では、次の2つのファイルを作成することでこれを行うことができます。

/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を使用している場合、上記のプロセスは、次の2つの場所のいずれかにある私のクックブックを使用して自動化できます。
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で正確に動作する上記のファイルは、他のバージョン/ディストリビューションを使用する際の出発点として役立ちます。

2
Chris Pick