複数のLinuxシステムで複数のコマンドを実行できませんか?

複数のLinuxシステムで複数のコマンドを実行できませんか?

私は約50台のUbuntuマシンを持っており、そのマシンで次のコマンドを実行する必要があります。

sudo apt-get install htop
sudo scp -r [email protected]:/home/todd/pip /tmp/
sudo apt-get install python-pip
sudo pip install --no-index --find-links="file:///tmp/pip/" kazoo
sudo scp -r [email protected]:/home/todd/parallel-gnu.tar /tmp/
sudo su
cd /tmp
tar -xvf parallel-gnu.tar
cd parallel-20101112/
sudo ./configure && make && make install
sudo mkdir /appholder
sudo chown -R golden /appholder/
sudo mkdir -p /opt/lnp
sudo scp [email protected]:/keeper/data/release/comp.tar.gz /opt/lnp/
sudo chown -R golden /opt/lnp/
sudo mkdir -p /comp/core
sudo chown -R golden /comp/core

そのため、上記のコマンドを使用してシェルスクリプトファイルを生成commands.shし、50台のコンピュータをすべて含む別のファイルを作成しましたmachines.text

マイコンピュータのリストは次のファイルにありますmachines.text

somemachineA
somemachineB

私のコマンドは次のファイルにありますcommands.sh

#!/bin/bash
sudo apt-get install htop
sudo scp -r [email protected]:/home/todd/pip /tmp/
sudo apt-get install python-pip
sudo pip install --no-index --find-links="file:///tmp/pip/" kazoo
sudo scp -r [email protected]:/home/todd/parallel-gnu.tar /tmp/
sudo su
cd /tmp
tar -xvf parallel-gnu.tar
cd parallel-20101112/
sudo ./configure && make && make install
sudo mkdir /appholder
sudo chown -R golden /appholder/
sudo mkdir -p /opt/lnp
sudo scp [email protected]:/keeper/data/release/comp.tar.gz /opt/lnp/
sudo chown -R golden /opt/lnp/
sudo mkdir -p /comp/core
sudo chown -R golden /comp/core

私はこのようなスクリプトを持っており、execute.sh次のように実行しています./execute.sh machines.txt

#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "###################################################"
    echo "Machine Name: $line"
    scp commands.sh $line:/tmp/commands.sh
    ssh -t $line 'script /dev/null . /tmp/commands.sh'
    echo "###################################################"
done < "$1"

上記を実行すると、以下のエラーが表示され、次のコマンドは実行されませんsomemachineA

todd@testMachine:~$ ./execute.sh machines.text
###################################################
Machine Name: somemachineA
todd@somemachineA's password:
commands.sh                                                                                                                                                                                                100%  104     0.1KB/s   00:00
Pseudo-terminal will not be allocated because stdin is not a terminal.
todd@somemachineA's password:
Script started, file is /dev/null
Script done, file is /dev/null
todd@somemachineA:/home/todd$ somemachineB: command not found

私が間違っていて、複数のLinuxシステムで複数のLinuxコマンドをどのように実行できますか?

ベストアンサー1

交換しよう

ssh -t $line 'script /dev/null . /tmp/commands.sh'

渡す

ssh  $line 'bash /tmp/commands.sh'
  • /dev/nullにスクリプトを書いていますか?
  • コマンドを対話的に実行すると、ttyが割り当てられます。

おすすめ記事