2014年9月4日星期四

tmux使用教程及技巧

tmux简介
tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权。使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机;当然其功能远不止于此。
直接使用yum安装: yum install tmux
tmux使用C/S模型构建,主要包括以下单元模块:

- 说明
server 服务器。输入tmux命令时就开启了一个服务器。
session 会话。一个服务器可以包含多个会话。
window 窗口。一个会话可以包含多个窗口。
pane 面板。一个窗口可以包含多个面板。
操作
类似各种平铺式窗口管理器,tmux使用键盘操作,常用快捷键包括:

Ctrl+b 激活控制台;此时以下按键生效
系统操作 ? 列出所有快捷键;按q返回
d 脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话
D 选择要脱离的会话;在同时开启了多个会话时使用
Ctrl+z 挂起当前会话
r 强制重绘未脱离的会话
s 选择并切换会话;在同时开启了多个会话时使用
: 进入命令行模式;此时可以输入支持的命令,例如kill-server可以关闭服务器
[ 进入复制模式;此时的操作与vi/emacs相同,按q/Esc退出
~ 列出提示信息缓存;其中包含了之前tmux返回的各种提示信息
窗口操作 c 创建新窗口
& 关闭当前窗口
数字键 切换至指定窗口
p 切换至上一窗口
n 切换至下一窗口
l 在前后两个窗口间互相切换
w 通过窗口列表切换窗口
, 重命名当前窗口;这样便于识别
. 修改当前窗口编号;相当于窗口重新排序
f 在所有窗口中查找指定文本
面板操作 将当前面板平分为上下两块
% 将当前面板平分为左右两块
x 关闭当前面板
! 将当前面板置于新窗口;即新建一个窗口,其中仅包含当前面板
Ctrl+方向键 以1个单元格为单位移动边缘以调整当前面板大小
Alt+方向键 以5个单元格为单位移动边缘以调整当前面板大小
Space 在预置的面板布局中循环切换;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled
q 显示面板编号
o 在当前窗口中选择下一面板
方向键 移动光标以选择面板
{ 向前置换当前面板
} 向后置换当前面板
Alt+o 逆时针旋转当前窗口的面板
Ctrl+o 顺时针旋转当前窗口的面板
tmux配置
tmux的系统级配置文件为/etc/tmux.conf,用户级配置文件为~/.tmux.conf。配置文件实际上就是tmux的命令集合,也就是说每行配置均可在进入命令行模式后输入生效。
下面是我的~/.tmux.conf配置:
# base
set -g display-time 3000    # 提示信息的持续时间;设置足够的时间以避免看不清提示,单位为毫秒
set -g history-limit 65535  # 每个窗口中可展示的历史行数

# mouse
set -g mode-mouse on         # 开启鼠标控制
set -g mouse-resize-pane on  # 开启鼠标可调整pane大小
set -g mouse-select-pane on  # 开启鼠标可选择pane
set -g mouse-select-window on # 开启鼠标可选择窗口

# bind key
unbind '"'           # 取消 '"' 的绑定, 原用于上下分割窗口
bind _ splitw -v     # 绑定 '_' 上下分割窗口 
unbind %             # 取消 '%' 的绑定, 原用于左右分割窗口
bind | splitw -h     # 绑定 '|' 左右分割窗口
bind r source-file ~/.tmux.conf \; display "Reloaded!" # 绑定 'r' 用于重载配置文件,重载后显示 "Reloaded!"
bind s setw synchronize-panes on  # 开启 pane 命令同步
bind a setw synchronize-panes off # 关闭 pane 命令同步

# window
set -w -g utf8 on    # 窗口显示内容使用utf8字符集显示
set -w -g window-status-current-bg red  # 当前选中窗口背景色为红色

# title
set -g set-titles on           # 开启终端程序的标题显示
set -g set-titles-string "#T"  # 标题显示内容为 ~/.bashrc 中 $PROMPT_COMMAND 变量的内容

# status bar
set -g status-utf8 on          # 状态栏使用utf8字符集
set -g status-bg black         # 状态栏背景色为 黑色
set -g status-fg white         # 状态栏前景色为 白色
set -g status-interval 2       # 状态栏刷新频率 2秒
set -g status-justify "left"   # 窗口列表的位置 靠左
set -g status-left "#[fg=yellow]#S "  # 状态栏最左端: Session的名称(颜色为yellow)
set -g status-right "#[fg=black]#T #[fg=yellow]%H:%M"  # 状态栏最右端: $PROMPT_COMMAND及时间
set -g status-right-length 50  # 状态栏右端的长度
tmux的session管理
Seesion 可以有效地分离工作环境。如我有三个网站, 可以分别设置'siteA','siteB','siteC'三个Session, 可以针对不同网站的需求和服务器的分布情况进行特定管理.
tmux new -s session_name # 创建一个叫做 session_name 的 tmux session
tmux attach -t session_name  # 重新开启叫做 session_name 的 tmux session
tmux switch -t session_name # 转换到叫做 session_name 的 tmux session
tmux list-sessions  # 列出现有的所有 session
tmux ls  # 列出现有的所有 session
tmux detach (prefix + d) # 离开当前开启的 session
tmux rename-session -t [current-name] [new-name] # 重命名session
Session的批量重建和管理脚本
#!/bin/bash


Session=$1
session_arr=(siteA siteB siteC)

function tmux_siteA()
{
    # mg
    tmux new-session -d -s 'siteA' -n 'mg' # 创建session siteA, 并给默认窗口命名为 mg
    tmux select-window -t 'mg'
    tmux split-window -h -p 50
    tmux send-keys -t 0 'ssh 192.168.1.101' C-m        # 其中 C-m 表示回车键 

    # ngx.web
    tmux new-window -n 'ngx.web'           # 新建 ngx.web 的窗口
    tmux split-window -h -p 50             # 左右分割 ngx.web 窗口为两个pane, 新建的pane的百分比为50%
    tmux send-keys -t 0 'ssh 1.1.1.0' C-m  # 引号内的内容是该pane中需要预先执行的命令
    tmux send-keys -t 1 'ssh 1.1.1.1' C-m  # 我这里是分别登录到两台机器中去
}

function tmux_siteB()
{
    # mg.zbx
    tmux new-session -d -s 'siteB' -n 'mg.zbx'
    tmux select-window -t 'mg.zbx'
    tmux split-window -h -p 50
    tmux select-pane -t 0
    tmux split-window -v -p 50
    tmux send-keys -t 1 'pwd' C-m
    tmux send-keys -t 2 'ssh 192.168.1.100' C-m

    # ngx.web
    tmux new-window -n 'ngx.web'
    tmux split-window -h -p 50
    tmux select-pane -t 1
    tmux split-window -v -p 50
    tmux select-pane -t 0
    tmux split-window -v -p 50
    tmux send-keys -t 0 'ssh 192.168.1.100' C-m
    tmux send-keys -t 1 'ssh 192.168.1.101' C-m
    tmux send-keys -t 2 'ssh 192.168.1.102' C-m
    tmux send-keys -t 3 'ssh 192.168.1.103' C-m

}

function tmux_siteC()
{
    # mg
    tmux new-session -d -s 'siteC' -n 'mg'
    tmux select-window -t 'mg'
    tmux split-window -h -p 50
    tmux send-keys -t 2 'g 80' C-m

    # push
    tmux new-window -n 'push'
    tmux split-window -h -p 50
    tmux select-pane -t 1
    tmux split-window -v -p 50
    tmux select-pane -t 0
    tmux split-window -v -p 50
    tmux send-keys -t 0 'ssh 192.168.1.100' C-m
    tmux send-keys -t 1 'ssh 192.168.1.101' C-m
    tmux send-keys -t 2 'ssh 192.168.1.102' C-m
    tmux send-keys -t 3 'ssh 192.168.1.103' C-m

}

for i in ${session_arr[@]}
do
     if [ "X$i" == "X$Session" ]
     then
        tmux start-server
        tmux has-session -t $Session 2>/dev/null
        Res=$?
          if [ $Res != 0 ]
          then
               tmux_$Session
          fi

        tmux attach-session -d -t $Session
     fi
done

2014年8月14日星期四

常用翻墙方法介绍

常用翻墙方法:
  1. hosts方法
  2. 专业翻墙软件 翻墙工具(自由门、无界、世界通, Tor, Gladder)
  3. VPN方法
  4. 代理软件
  5. 反向代理
  6. 正向代理
  7. 透明代理
  8. pac智能翻墙
hosts方法
原理
部分域名只是进行了dns污染, 只需设置好正确的hosts, 就可以访问被封的网站.
例:
#Goggle Services ----Starts---- 
203.208.46.146 chrome.google.com 
203.208.46.146 code.google.com 
203.208.46.146 picasaweb.google.com 
203.208.46.146 images6-focus-opensocial.googleusercontent.com 
203.208.46.146 plus.google.com 
203.208.46.146 dl.google.com 
203.208.46.146 dl-ssl.google.com 
203.208.46.146 groups.google.com 
203.208.46.146 goo.gl 
203.208.46.146 appengine.google.com 
#Google Services ----Ends----

#Twitter ----Starts---- 
199.59.150.9 api.twitter.com 
199.59.150.10 twitter.com 
199.59.150.10 www.twitter.com 
#Twitter ----Ends---- 
弊端
  1. 被dns污染的域名有限
  2. 有些域名就算设置了hosts, 还有域名关键字过滤手段等着
  3. 维护成本极高
  4. 每个设备都需要维护一份hosts, 有些设备无法修改hosts文件
翻墙软件
原理
专用翻墙软件的私有协议
常用翻墙软件
Tor, 无界门, 自由门, 无界浏览
弊端
  1. 近年来相继被封, 翻墙效果不太稳定.
  2. 需要安装和配置客户端, 但在没翻墙的情况下, 基本无法获取到这些软件.
  3. GFW未必能知道你透过翻墙软件在浏览什么,但要知道你在使用翻墙软件就绝对不难。
VPN方法
原理
通过VPN建立一条加密隧道, 让数据在该加密隧道内通信. 常用的VPN协议有OpenVPN, L2TP/IPsec, PPTP, 可以通过在国外机器上自己安装搭建VPN服务器.
免费免安装的 VPN
绝大多数不需要安装就可以使用的 VPN 都适用于任何系统的电脑和智能手机:
  • MacroVPN
  • Prox Network
  • Free UK VPN
  • Tenacy
  • Best Free VPN
只要在系统内设置好服务器地址,输入帐号和密码就可以使用了。
如: http://www.vpnforuk.com/
免费 VPN 客户端
需要安装的 VPN 客户端, 一般只适用于电脑:
  • SecurityKiss (适用于 Windows)
  • ProXPN (适用于 Windows 和 Mac)
  • Hotspot Shield (适用于 Windows 和 Mac)
  • ExpatShield (适用于 Windows)
  • Loki VPN Client (适用于 Windows)
  • OpenVPN (适用于 Windows、Mac、Linux、iOs、Android、等等)
  • RaptorVPN (适用于 Windows 和 Mac)
弊端
  1. GFW强大到可以探测协议头, 从而阻断VPN连接
  2. 需要国外拥有vps或者主机, 搭建VPN服务器
  3. vpn不区分流量, 要不全部的流量都通过VPN, 或者都不通过
  4. 为了智能翻墙, 需要维护一个路由表
  5. 就算维护了一个路由表区分国内国外流量, 但是并不是国外所有网站都是被封的, 减慢了访问正常网站的速度
代理软件
原理
用户通过浏览器访问网站的流程是: 首先浏览器发起请求, 所有的请求都是发送给本机或者局域网内的代理客户端, 客户端代理软件通过自生的加密通道连接国外的代理服务端, 服务端接收到数据后通过加密通道传输给代理客户端, 代理客户端将数据转发给浏览器呈现.
典型代表
  • goagent
  • stunnel
  • ssh隧道
弊端
  1. 需要在浏览器上手工安装proxy switchsharp设置代理, 只让浏览器生效
  2. 也可以不安装插件, 设置系统代理, 那样将进行全局代理设置
  3. 有可能遭受中间人攻击
优点
配合proxy switchsharp可以自定义规则进行翻墙 可以使用别人已经做好的配置, 直接应用就可以, 基本的被墙网站都可以打开.
反向代理和正向代理
反向代理
对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置(需要智能dns支援)。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。CDN常使用该种方法.
正向代理
正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。
常用反向/正向代理软件
  • nginx
  • squid
弊端
  1. 需要对每个域名单独配置
  2. 对于https站点来说, 一样会遇到证书问题
透明代理
原理
透明代理的意思是客户端根本不需要知道有代理服务器的存在,它劫持并改编你的request fields(报文),并会传送真实IP。 如果把正向代理、反向代理和透明代理按照人类血缘关系来划分的话。那么正向代理和透明代理是很明显堂亲关系,而正向代理和反向代理就是表亲关系了。 透明代理一般需要在网关出口处对网络进行劫持, 一般需要专有设备支持. 我自己的测试中, 可以做到http的透明代理, 但是https的代理总提示证书错误. 透明代理实践的例子就是时下很多公司使用的行为管理软件。
常用软件
  • squid
  • 行为管理软件
特点
  1. 可以对网络行为进行比较详细的控制
  2. 需要购买专业的设备
PAC文件翻墙
原理

pac文件项目(Flora_Pac),是一个辅助翻墙工具,代理自动配置(PAC)文件是用于浏览器自动代理的脚本。PAC文件定义了浏览器和其他用户代理如何自动选择适当的代理服务器来访问一个URL。浏览器在访问其他页面以前,首先访问这个PAC文件。PAC文件中的URL可能是手工配置的,也可能是是通过网页的网络代理自发现协议(Web Proxy Autodiscovery Protocol)自动配置的。这个pac并不是翻墙工具,它是翻墙代理的辅助软件,相当于智能调度配置各种翻墙软件和浏览器,在使用时必须自备各种翻墙工具并启动相应的软件来配合它。

Pac文件分别对应常用的自由门、逍遥游、无界、Puff、赛风3、 世界通、花园、张生翻墙、tor、Vidalia、Your Freedom、SSH、ssh+Privory、GoAgent、GAppProxy、Wallproxy、Hyk-proxy、Snova、西厢代理 等翻墙软件。