Cygwin使用

Update: 2013-01-04

常用软件安装

安装apt-cyg

安装常用工具

# apt-cyg install man cygwin-doc
apt-cyg install vim screen wget subversion openssh pwgen gzip bzip2 curl rsync bash-completion \
 lftp nc tree p7zip connect-proxy util-linux bind-utils inetutils

安装python环境

apt-cyg install python python-crypto

常用工具设置

Cygwin终端

bashrc

screen设置

#
# ~/.screenrc
#
# 启动时不显示欢迎屏幕
startup_message off

# 定义screen的功能键为Ctrl-A。向终端输入Ctrl-A时应按 Ctrl-A a。
#escape ^Aa

# 屏幕缓冲区 1024 行。
defscrollback 1024

# 显示窗口列表
caption always "%-w%{= BW}%50>%n %t%{-}%+w%<"

# 按 Ctrl-A w 或 Ctrl-A Ctrl-W 显示窗口列表
bind w windowlist -b
#bind ^w windowlist -b

#在使用screen过程中,经常会遇到“闪屏”的问题,这是可以关掉的。
#快速关掉:也就是先输入CTRL + a,再输入CTRL + g。
#永久关闭:修改/etc/screenrc 加入
vbell off

~/.vimrc

详见:vimrc

" ~/.vimrc
set mouse=c
set nobackup

" set paste

set fileformats=unix,dos,mac
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
set encoding=utf-8
" set termencoding=cp936
let &termencoding = &encoding
language messages en_US.UTF-8
"language messages zh_CN.UTF-8

" colo murphy

" tab
set tabstop=4
set cindent shiftwidth=4
set autoindent shiftwidth=4
" TAB -> Space
set expandtab

~/.ssh/config

#ssh_config
#~/.ssh/config
IdentitiesOnly yes
ServerAliveInterval 60
GSSAPIAuthentication no

Host m*
    Port 22
    User root
    ControlMaster auto
    ControlPath ~/.ssh/master-%r@%h:%p
    #ProxyCommand connect-proxy -S 127.0.0.1:2223 %h %p
Host mNagios
    Hostname 172.16.16.150

其他设置

SSH Server

crontab

nontsec

这在 Cygwin 下创建的文件,其他管理员不可写,是所谓的 ntsec 在起作用。通过 NTFS 的权限设置,模拟 UNIX 的权限。可以通过 CYGWIN 环境变量修改。如:

export CYGWIN="nontsec nosmbntsec"

中文乱码设置

**若存在中文问题才进行以下设置。**

技巧收集

SSH Agent on Cygwin

ssh-agent 启动后,会设置 SSH_AUTH_SOCK 和 SSH_AGENT_PID 两个环境变量。

ssh 通过检测 SSH_AUTH_SOCK 和 SSH_AGENT_PID 两个环境变量判断是否存在 ssh-agent 后台进程,如果存在则使用 ssh-agent 完成自动认证,否则提示用户输入密码。

ssh-agent启动输出内容为环境参数设置脚本,需以eval或source方式执行来加入环境参数。

ssh-agent.exe -s
SSH_AUTH_SOCK=/tmp/ssh-GYP4AmeZ5LP6/agent.1272; export SSH_AUTH_SOCK;
SSH_AGENT_PID=4536; export SSH_AGENT_PID;
echo Agent pid 4536;

实现如下功能:

  1. 打开Cygwin时若没有ssh-agent进程,则自动启动,若已有ssh-agent进程,则不再重复启动;
  2. 关闭Cygwin时,检查若是最后一个Cygwin窗口则自动关闭ssh-agent,若还有其它Cygwin窗口则不关闭。
  3. 关闭所有Cygwin窗口,之前保存的key将不再有效。
  4. 多个窗口均共用同ssh-agent。
    # Add to ~/.bash_profile
    # start_stop_ssh_agent
    SSH_ENV=$HOME/.ssh/ssh-agent-env
    function stop_ssh_agent {
        if [ $(ps -ef|grep mintty$|wc -l) -lt 2 -a -n "$SSH_AGENT_PID" ];then
            ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null && kill $SSH_AGENT_PID
        fi
    }
    function start_ssh_agent {
        if [ -f "${SSH_ENV}" ]; then
             . ${SSH_ENV} > /dev/null
             ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null && return 0
        fi
        echo "Initialising new SSH agent..."
        /usr/bin/ssh-agent -s | sed 's/^echo/#echo/' > ${SSH_ENV} \
        && echo succeeded \
        && chmod 600 ${SSH_ENV} \
        && . ${SSH_ENV} > /dev/null
        #&& /usr/bin/ssh-add \
    }
    start_ssh_agent
    #trap "[ \$(ps -ef|grep mintty\$|wc -l) -lt 2 ] && kill $SSH_AGENT_PID" 0
    trap "stop_ssh_agent" 0
    
  5. MAC OS版本
    # start_stop_ssh_agent
    SSH_ENV=$HOME/.ssh/ssh-agent-env
    function stop_ssh_agent {
        U=$(whoami)
        if [ $(ps aux|grep "$U.*-bash\$"|grep -v grep|wc -l) -lt 3 -a -n "$SSH_AGENT_PID" ];then
            ps aux | grep ${SSH_AGENT_PID} | grep ssh-agent > /dev/null && kill $SSH_AGENT_PID
        fi
    }
    function start_ssh_agent {
        if [ -f "${SSH_ENV}" ]; then
             . ${SSH_ENV} > /dev/null
             ps aux | grep ${SSH_AGENT_PID} | grep ssh-agent > /dev/null && return 0
        fi
        echo "Initialising new SSH agent..."
        /usr/bin/ssh-agent -s | sed 's/^echo/#echo/' > ${SSH_ENV} \
        && echo succeeded \
        && chmod 600 ${SSH_ENV} \
        && . ${SSH_ENV} > /dev/null
        #&& /usr/bin/ssh-add \
    }
    start_ssh_agent
    trap "stop_ssh_agent" 0
    

ssh-add的作用是把指定的私钥添加到 ssh-agent 所管理的一个 session 当中。

ssh-agent 是一个用于存储私钥的临时性的 session 服务,也就是说当你重启之后,ssh-agent 服务也就重置了。

ssh-add ~/.ssh/id_rsa
[enter your password]