1. ホーム
  2. リナックス

スクリプトが ssh を呼び出した後、stdin がターミナルでないため、疑似ターミナルが割り当てられない

2022-01-22 17:17:48

ちょうど完了した最近のプロジェクトでは、我々は、コマンドモードで直接ssh +それのIP(ユーザーパスワードが必要ない設定によって)、例えば、指定されたサーバにSSHリモートログインを使用:ssh 10.22.19.54 、ローカルサービスに終了するには、終了を使用しています。いくつかの自動化を達成するために、私は次のようにSHELLでこのコードを実装しています。

G_log="/home/admin/call.log"
G_var=$*

ssh 10.22.19.54 >>$G_log <<EOF
echo "私は今54歳です."
echo "$G_var"

/home/admin//disp/adb.sh "$G_var"

出口
EOF

しかし、デバッグ中に、このスクリプトを呼び出した後、毎回次のようなエラーが報告される、非常に憂慮すべき問題があることがわかりました。

stdinはターミナルではないので、擬似ターミナルは割り当てられません。

TERM環境変数が設定されていない。

そして、私たちのスクリプトはJAVAを通して呼び出されるのですが、JAVAスレッド呼び出し後、シェルが終了せず、その結果、システムリソースがずっと使われてしまい、大量のユーザーがいると、まずシステムが持ちこたえられないことがわかりました。これは一刻も早く修正しなければならなかった。

長い間ウェブで検索した結果、同じような問題が山ほど見つかりました。これを読んだ後、SAエンジニアにアドバイスを求めました。彼はパラメータ-ttを追加することを勧め、結果はすぐに返ってきました。本当に良いことだと思います。

要約すると シェルスクリプトからsshを呼び出す場合は、スクリプトからの呼び出しであることを示すパラメータを追加する。