ssh+yumでリモート先にインストール

僕は、自作rpmパッケージをyumで管理 - yokkunsの日記で書いたように、自作のパッケージをyumで管理しているのですが、サーバが複数あると、rpmパッケージをscpで転送して、各サーバにログインしてそれをインストールしたりと結構面倒です。

そこで、ssh+yumでリモート先にパッケージをインストールすることにしました。


単純に

$ ssh <リモート先> sudo yum install <パッケージ>

としたいところですが、通常 sudoコマンドを実行できるのはログインしているユーザーのみとなっているので、これは無理です。(参考: http://kbase.redhat.com/faq/docs/DOC-16667

sshコマンドには、-tオプションを使って強制的に pseudo-tty を割り当てることが出来るので、これを使います。

$ ssh -t <リモート先> sudo yum install <パッケージ>

通常のインストールはこれで良いのですが、僕は自作のパッケージをインストールしたいので、以下のような簡単なスクリプトを書きました。

#!/bin/sh

PATH=/bin
SCP=/usr/bin/scp
SSH=/usr/bin/ssh
YUM=/usr/bin/yum
SUDO=/usr/bin/sudo

if [ -f $2 ];
then
        ${SCP} $2 $1:/var/tmp/ | exit 1
        ${SSH} -t $1 ${SUDO} ${YUM} install /var/tmp/`basename $2`
else
        ${SSH} -t $1 ${SUDO} ${YUM} install $2
fi

$ yum_ssh_install <ホスト名> <パッケージ名 or rpmファイル名>

第2引数がファイルの場合はscpで転送してそれをインストール、そうじゃない時は通常のインストールを行っています。

これで、複数台のサーバにインストールする時に楽出来そうです。