目的
- 踏み台サーバー(要塞サーバー)からしかアクセスできないサーバーにローカル環境から簡単に確認をしたい
- いわゆる多段sshでのダブルクォーテーション・シングルクォーテーションの使い方
結論
ローカル環境の環境変数は""で囲まれた中なら使える
クォーテーションが必要な部分がローカル環境でも取得できるならこの方法で実現
target_date=`date -v-2d +%Y%m%d` # 一昨日の日付
ssh bastion "ssh goal_server \"ls -ltr /var/log/goal_server/*${target_date}*.log\""
経緯
ローカル環境はmacOS、ssh先はすべてCentOS(Linux)を前提としています。
クォーテーションを使用しない場合、参考urlに載せたようにヒアドキュメントを利用すると簡潔にコマンドを書くことができます。
cat <<EOS | \ssh bastion 'ssh goal_server sh'
hostname # goal_serverと表示
EOS
環境変数として日付を利用したく、dateコマンドで「昨日」や「一昨日」が欲しい場合にはクォーテーションで囲む必要があり、
最初は環境変数をgoal_server
で得てから実行すればできると思ったが、target_date
には何もセットされない。
# ダメ # 一昨日の日付
cat <<EOS | ssh bastion 'ssh goal_server sh'
'target_date=`date -d "2 days ago " +%Y%m%d`; ls -lr /var/log/goal_server/*${target_date}*.log'
EOS
ローカル環境の環境変数は""で囲まれた中なら使えることを利用し、
クォーテーションが必要な部分がローカル環境でも取得できるならこの方法で実現
target_date=`date -v-2d +%Y%m%d` # 一昨日の日付
ssh bastion "ssh goal_server \"ls -ltr /var/log/goal_server/*${target_date}*.log\""