単一のローカルホストに複数の端末があり、同じユーザーと同じ IP アドレスに ssh 接続しました。リモートホストがログに記録されているすべての端末を見つけ、それらで実行されているすべてのプロセスを終了し、そのリモートホストからログアウトしたいと考えています。以下のシェルスクリプトで成功しました。
#Find list of terminals in which the remote host is logged in.
openedTerminals=`ssh $user@$publicIP "ps -aux | grep -i $user@pts | grep -v grep | cut -d' ' -f 3"`
#close all the ssh sessions to that remote host
i=1
terminalPID=`echo $openedTerminals | cut -d' ' -f $i`
while [[ -n "$terminalPID" ]]
do
ssh $user@$publicIP "kill $terminalPID"
i=`expr $i + 1`
terminalPID=`echo $openedTerminals | cut -d' ' -f $i`
done
次のコマンドを使用して新しいターミナルを開き、リモート ホストに ssh して、コマンド プロンプトから実行すると正常に動作しました。
gnome-terminal -window-with-profile=NOCLOSEPROFILE -e "ssh -X $user@$publicIP"
最初のコードの作業とは別に、最初のコードで終了したすべてのリモート マシンに対して (別のリモート マシンに ssh 接続して) 新しいターミナルを開きたいと考えています。したがって、上記のコマンドを最初のコードに次のように挿入しようとしました。
#Find list of terminals in which the remote host is logged in.
openedTerminals=`ssh $user@$publicIP "ps -aux | grep -i $user@pts | grep -v grep | cut -d' ' -f 3"`
#close all the ssh sessions to that remote host
i=1
terminalPID=`echo $openedTerminals | cut -d' ' -f $i`
while [[ -n "$terminalPID" ]]
do
ssh $user@$publicIP "kill $terminalPID"
gnome-terminal -window-with-profile=NOCLOSEPROFILE -e "ssh -X $newUser@$newPublicIP"
i=`expr $i + 1`
terminalPID=`echo $openedTerminals | cut -d' ' -f $i`
done
しかし、これは無限ループで実行を開始し、無限の数の新しい端末を開きます。
どこが間違っているかを教えてください。望ましい解決策を得るために、それを修正する方法を提案してください。
また、同じシェル スクリプト (最初のコード) に、リモート マシンがログアウトされた端末を閉じるコマンドを追加したいと考えています。誰でもこれについて私を案内してもらえますか?
前もってありがとう、さえや