打开与注销的ssh-s数量一样多的终端,并关闭ssh-s注销的终端

时间:2013-10-23 18:44:15

标签: linux shell ssh

在一个localhost中有几个终端,我在其中ssh-ed到同一个用户和相同的IP地址。我想找到已记录远程主机的所有终端,终止其中运行的所有进程并注销该远程主机。我成功使用了以下shell脚本。

#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

但是这开始在无限循环中运行并打开无数个新终端。

请告诉我错误的地方并提出纠正方法以获得所需的解决方案。

另外,我希望在同一个shell脚本(第一个代码)中添加一个命令来关闭远程机器注销的终端。有人可以指导我吗?

提前致谢, Saeya

1 个答案:

答案 0 :(得分:0)

当只打开一个ssh-ed到远程机器的终端时,由于“cut”命令,它会在无限循环中运行。如果有一个单独的案件来处理一个终端,这将正常工作。