Cou氏の徒然日記

ほのぼの日記ブログです。

SSHコマンドでのリモートログイン時の罠・・・

以前、LinuxへのSSH公開鍵認証でのログインの話をしましたが、また最近、そのスクリプトのメンテナンスや機能拡張をしていまして、とある現象に遭遇

[やりたいこと]
Linuxマシンにはあらかじめ、環境変数を設定しておきます。そのLinuxマシンにFTPスクリプトを送り込み、SSHログインした際にはその環境変数の値によって、動作を変える。

Linuxマシンに環境変数を設定しておき、いざ、テスト!
…しかし想定通りの動きにならず、設定したはずの環境変数とは違う分岐の動作になっているようでした。

例えば、あらかじめLinuxマシンで、そのユーザの「~/.bash_profile」ファイルに
TestFlag=Y
export $TestFlag

と定義を追加しておき、
if [ $TestFlag = "Y" ] ; then
    echo "実行したい処理"
else 
    echo "こっちじゃないよ…" 
fi
といったようなスクリプトSSHログインして実行するようなバッチを組んでも…
なぜか、"こっちじゃないよ"と言われてしまいます。

イメージ 1


結局、原因がわからずハマってしまいましたが、いろいろと調べてみると、
SSHリモートログインの際にbashシェルの仕様として、この時は環境変数の読み込みは行わなれないようです。

つまり、teratermなどでログインして環境変数情報を確認してみた場合にはきちんと設定されているように見えても、SSHコマンドでリモートログインして実行する場合にはその設定は効いていないと…。


いやー、この罠にドップリと浸かってしまいました。

対策としては、SSHコマンドでの処理実行時に、環境変数の読み込みを意図的に行う処理を追加すれば無事解決しました。
具体的には、「source ~/.bash_profile」などファイルを読む処理を明示的に先頭に追加して実行するようにして、そのあとに上記スクリプトの実行を行えば、何事もなかったかのようにキレイに動作しました。

イメージ 2


意外なところに落とし穴がありますね…。