0

単一のローカルホストに複数の端末があり、同じユーザーと同じ 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

しかし、これは無限ループで実行を開始し、無限の数の新しい端末を開きます。

どこが間違っているかを教えてください。望ましい解決策を得るために、それを修正する方法を提案してください。

また、同じシェル スクリプト (最初のコード) に、リモート マシンがログアウトされた端末を閉じるコマンドを追加したいと考えています。誰でもこれについて私を案内してもらえますか?

前もってありがとう、さえや

4

1 に答える 1

0

リモート マシンに ssh 接続されている端末が 1 つだけ開かれている場合、これは「cut」コマンドのために無限ループで実行されます。1 つの端末を処理する別のケースがある場合、これは正常に機能します。

于 2013-10-24T09:14:54.870 に答える