konbu's blog

PHP/Ruby/Python あたりが仕事で使っている言語です。プログラミング、学習や教育ネタを書いていきます。

SSH 接続先にログインした状態で文字列展開等を使う

今まで esa.io を使っていたけど、色々あって解約することにしたのでブログにコンテンツを移していくことにした。 外部に出すこともできないものもあるため精査しつつ定期的に移していく。

目的

SSH でログインした先のホストで for in を使ってシェルを実行したかった。

#!/usr/bin/bash

ssh TARGET_HOST "for host in `cat hosts.txt`; do echo $host; done"

雰囲気としてはみたいな事がしたかった。 実際は上記方法ではシェルスクリプトの実行時に展開されてしまうのでダメだった。

内容

対応方法としては、ssh 後に実行する処理だけスクリプトにして、bash の -s オプションで読み込むので大丈夫だった。

#/use/bin/bash

for host in `cat hosts.txt`; do
    echo $hosts
done
$ ssh TARGET_HOST "bash -s" < echo_hosts.sh