リモートコンピュータでrootに変更せずにローカルコンピュータでスクリプト/コマンドを実行する方法があるかどうか疑問に思います。
いくつかの背景
Capistranoを介していくつかのタスクを設定しようとしていますが、sudo
アクセス権が必要です。約30台以上のサーバーがあり、/etc/sudoers
手動で更新するのは痛いでしょう。だから、リモートで更新する方法があるかどうか疑問に思います。
ベストアンサー1
bash
リモートシステムでローカルスクリプトを実行し、スクリプトを供給してリモートで実行できます。
$ ssh user@host 'bash -s' < script.sh
編集する
sudo
リモートコンピュータで使用する必要があるコマンドを実行するには、ssh's
-t
オプションを使用してコマンドをに渡しますssh
。-t
擬似端末ユーザーがssh
パスワード入力などの実行コマンドと対話できるようにします。sudo
$ ssh user@host -t 'sudo foo'
sed
>
シェルリダイレクトは許可されていないため、ファイルを変更するにはリダイレクトの代わりにこの方法を使用することをお勧めしますsudo
。また、コマンドのすべての変数sed
がに渡されますssh
。
$ ssh user@host -t 'sudo sed -i "\$a text to insert" /path/to/file'
プロセス全体を自動化するには:
#!/bin/bash
SERVERS=( server1 server2 server3 )
for HOST in ${SERVERS[@]}; do
ssh user@${HOST} -t 'sudo sed -i "\$a text to insert" /path/to/file'
if [[ $? -ne 0 ]]; then
echo "ERROR: $HOST did not complete"
else
echo "$HOST complete"
fi
done