• FreeBSD下使用Screen优化SSH体验

    post by Holmesian / 2010-8-26 10:46 Thursday

    因为安全原因一般对服务器的访问都是有非常严格的IP限制的,但是为了方便随时随地的迅速响应我在防火墙上开放了通过手机CMNET网段访问服务器SSH的权限。这么一来由PPC上的PoketPutty直接访问和操作服务器或者是通过手机CMNET带动笔记本访问服务器都要方便很多。

    由于以前在freebsd下使用SSH远程登录时基本上都是良好的网络环境,很少出现非正常中断的现象。但是使用CMNET访问服务器之后,由于CMNET的带宽和不稳定性(瞬时带宽不足或者基站切换都可能会导致导致CMNET连接IP更换)连接非正常中断的概率要大大提高。而如果一旦连接非正常中断,重新连接时,系统将开一个新的session,无法恢复原来的 session,最终将导致服务器系统上遗留了不少失效的Session。
     

     
    1. Holmesian pts/0 Aug 26 09:42 (117.136.21.200) 
    2. Holmesian pts/1 Aug 26 09:45 (117.136.21.219) 
    3. liaux pts/3 Aug 25 12:43 (202.101.208.90) 
    4. Holmesian pts/7 Aug 26 10:17 (117.136.21.162:S) 
    5. Holmesian pts/8 Aug 26 10:18 (117.136.21.162:S)



    虽然可以通过设置SSH的超时来自动清理这些无效的Seesion,但是无效的Session遗留在系统上总会感觉不爽。这个时候screen命令就华丽丽地登场了:Screen工具是一个终端多路转接器,在本质上,这意味着你能够使用一个单一的终端窗口运行多终端的应用。



    通过Screen工具在ssh搞东西时,就不需要以前那样额外多增加一个终端来保持登录状态了。

    通过PORTS安装Screen
    # cd /usr/ports/sysutils/screen
    # make install clean

    使用简述
    # screen
    //以下^A表示同按“Ctrl + A”键
     

     
    1. # ^A c //Create,开出新的 window
    2. # ^A n //Next,切换到下个 window
    3. # ^A p //Previous,前一个 window
    4. # ^A ^A //在两个 window 间切换
    5. # ^A w //Windows,列出已开启的 windows 有那些
    6. # ^A 0…9 //切换到第 0..9 个 window
    7. # ^A t //Time,显示目前的时间,与系统的 load
    8. # ^A K //kill window,强制关掉目前的 window
    9. # ^A ? //Help,显示简单说明
    10. # ^A d //detach,将目前的 screen session (可能含有多个 windows) 丢到背景执行




    # screen -ls //显示所有的 screen sessions
    # screen -r [keyword] //选择一个 screen session 回来 (捡回来) , 恢复离线的screen作业, 单独输入 screen -r 也行的,通过这个功能就可以捡回之前断线的Session