Bash
SSH

SSHで一気にコマンドいろいろ投げたい

More than 1 year has passed since last update.

memo

パスなしSSHログインできるよう準備が必要。(そこは略)

sample1
ssh user@hostname1 "mkdir /tmp/dir"

コマンドのecho出ないし標準出力に吐くコマンドじゃないと正常終了かどうかわかりにくい。(なのでSSHしたらhostnameを打っておく。)でもエラーの時はメッセージ出る。
複数のコマンドを一気に投げたい場合。(シェルスクリプトを作成してscpで飛ばして実行でもよいけど)
testも書ける。

sample2
-bash $ ssh user@hostname1 <<EOC
hostname
cd /tmp
if [ -d dir ]; then
  rm -rf dir
fi
mkdir dir
EOC
sample2-1
-bash $ ssh user@hostname1 "cd /tmp;rm -rf dir;mkdir dir"

複数のコマンドを複数ホストに一気に投げたい場合はforで回す。

sample3
#!/bin/bash
HOSTS="hostname1 hostname2 hostname3"
for i in ${HOSTS}; do
ssh user@$i <<EOC
hostname
cd /tmp
if [ -d dir ]; then
  rm -rf dir
fi
mkdir dir
EOC
done

sudoを使おうとすると怒られる(sudoの設定による)ときは -t を使う。

sample4
ssh -t user@hostname1 "sudo mkdir /tmp/dir"

これなに?

サーバいっぱいでSSHで入って同じコマンド投げるの大変なときや、インスタントに投げるのに使える。窓たくさん開きたくない。