防止因意外掉线断网引起的ssh终端程序异常20140110

来源:互联网 发布:不是c语言关键字 编辑:程序博客网 时间:2024/06/11 20:58

背景:在通过ssh管理服务器的过程中,经常会出现意外断网、掉线的问题,出现断网掉线的时候终端就断开,如果此时有前台正在运行的程序或者当前的操作非常重要且不可终止,后果可能很严重,那时你就欲哭无泪呀,也许有同学说可以用nohup,不错,但是在很多时候我们也不知道什么时候掉线、什么时候断网,即使我们知道nohup,也不一定能有效的利用起来,并且每次前后台来回切换也挺麻烦的。所以找到了一种一次配置(还是对用户透明),终身受益的方式----screen。


用途:可靠的恢复异常中断的ssh会话


要点:用linux下强大的screen开启虚拟终端,配合用户的profile文件一次搞定,用户ssh登录后自动提示是否有异常中断的会话,有的话提示选择要恢复的会话,没有的话直接进入新会话,所有操作对终端用户是透明的,如果后期再结合堡垒机那就更完美了。


配置过程:

1、安装screen(略)

2、在特定用户的profile文件末尾添加如下(也可以用全局profile)

[root@admin200 ~]# more  /home/chroot_test/.bash_profile    

##add by lai
start_time=$(date +%Y年%m月%d日%H:%M:%S)
ssh_session_name=laijingli_$start_time


##查询挂起的会话
/usr/bin/screen -ls|/bin/grep Detached >/dev/null
if [ "$?" = "0" ]; then
        ##显示挂起的会话
        /usr/bin/screen -ls|/bin/grep Detached
        echo -ne "\033[32m\033[01m你有异常断开的ssh会话连接,请输入要恢复的会话编号,或者输入new将启用新会话:\033[0m"


        ##判断输入
        read input_session
        input_check=`/usr/bin/screen -ls|/bin/grep Detached|awk '{print $1" "$2}'|/bin/grep ^$input_session|wc -l`
        #echo input_chcek:$input_check


        until [ "$input_session" = "new" ] || [ "$input_check" = "1" ];do
                echo -en "\033[31m\033[01m  请输入会话编号或者no:\033[0m"
                read input_session
                input_check=`/usr/bin/screen -ls|/bin/grep Detached|awk '{print $1" "$2}'|/bin/grep ^$input_session|wc -l`
        done


        ##启用新会话or恢复会话
        if [ "$input_session" = "new" ];then 
                echo 正在启用新会话
                exec /usr/bin/screen -S $ssh_session_name
        else
                echo 正在恢复会话:`/usr/bin/screen -ls|/bin/grep Detached|awk '{print $1" "$2}'|/bin/grep ^$input_session`
                exec /usr/bin/screen -r $input_session
        fi
else
        echo 2 new:你没有异常断开的ssh会话连接,将启用新会话
        exec /usr/bin/screen -S $ssh_session_name
fi


3、效果



0 0