windows shell 配置记

在win下一直想搞个能像iterm那样好看又好用的终端,正好手上是全新windows,需要从头配置,于是以下是我的心路历程。

首先我想继续从putty开始。putty确实是很好用的终端模拟器,但配置起来相当恶心。putty的所有配置是记在注册表里的,这也是我有点对它不满的地方。颜色的配置是用的0-255,这使得市面上大多数color scheme的格式需要转换,而且需要以注册表的形式导入。这又造成merge不同配置文件变得几乎无法操作。

有位台湾人在其上开发了一个pieTTY,专门增加了对中文的支持,以及其他一些奇技淫巧,其中有个亮点是无边框的glass模式,但是这个模式下的阴影太难看,难以接受。

putty还有个问题就是没有tab,这是我有考虑secureCRT或者xshell最主要的原因。尽管xshell功能确实很上流,但他们不是自由软件,而且丑(当然,某些人觉得是怀旧)。再说,市面上也存在一些给putty加tab的方法。不过:

1.puttyTabs加了一个飞起的tabs,实在是太难看了不能接受。
2.putty connection manager是把putty wrap在它的窗体里面,虽然比较好看,但是当putty使用非默认的配置启动的时候,就会从它里面掉出来!好讨厌。
3.putty-nd是在putty基础上开发的,加了一个类似chrome的标签栏。但是操作很困难,对win7窗口特性支持不好,而且有种说不出的野鸡感。

到了不得不考虑真正的shell+ssh的时候了,所谓真也就是cygwin或者mingw。这样的环境可以操作本地文件,用vim替代gvim,而且直接用命令行的ssh和scp,又可以减少一些鼠标磨损。完全让windows失去window的感觉了有没有。因为这两个我以前用得都很少,于是选择了相对简洁的mingw,而且我喜欢mingw-get,跟apt-get类似的感觉。那么选择什么shell呢?

mingw现在已经不默认提供rxvt,默认是sh.exe(bash)。这个shell给人一种稳固的安全感,因为它几乎没有什么可定制的选项。由于mingw团队似乎不关注亚洲人用不用,他们的shell对unicode支持非常差。sh.exe不能显示和输入中文,虽然有办法可以勉强让ls能打出中文文件名,并且能输入中文,但输入中文的时候,是在一个类似ucdos的古老命令行文本界面中,我表示确实不能接受,再见。

而且更致命的是vim编辑文本时不能正确显示和输入中文。应该是编码问题,效果跟putty没有设置translation utf8的情况一样。谁知道怎么解决吗?算了 who cares。

mingw也有rxvt,熟悉这个这个终端的朋友知道,它的特点是默认非常非常的难看,能让人瞬间失去调整它的勇气和信心。不过因为在linux下我已经跟它斗争过很长时间,所以这次义无反顾的踏上了征途。但令人失望的是,用Consolas字体始终宽度有问题,只能用相对丑陋的字体。而且中文问题与sh.exe相同。再见。

然后我发现了console2这个东西。mingw-get可以安装这个终端模拟器的msys版。这货可以把不同的终端嵌入在它的tab中,比如一个tab开bash, 一个tab开cmd,毫无违和感。而且它自定义选项很丰富,设置起来眼花缭乱想吐。因为它是把终端(如rxvt)输出的内容格式化后再输出,所以终端本身难看也没有关系,你看不见它。但问题在于终端如果乱码,console2也会乱得完全一样。

最后我发现了minTTY,这个shell好像是专为cygwin做的,而且是基于putty。所以很自然它具有编码的设置。于是就解决了输入输出中文的问题。而且minTTY支持输入法、win7窗口效果、半透明这些貌似很基础但是很少得到实现(没有人在意吗!)的特性。于是我选择了它。

由于我对tab过于执着,还是使用了必杀技windowTabs,这个软件使不同窗口转为同一窗口的tab,并且可以选择指定程序和自动合并,支持快捷键。虽然也有点微妙的山寨感,但是标题栏拉到最上面或者窗口失去焦点时,这些tab会隐藏。我觉得还是接受好了。最后的效果是这样:

update: 既然有人伸手了,总结一下:

1.安装mingw

2.在/etc/profile中加入:alias ls=”ls –color=tty –show-control-chars”, 这样ls才有颜色。
如果对ls的颜色真的很在意,可以用上solarized dircolors. (via)

3.在 .inputrc 中加入:

set meta-flag on
set input-meta on
set output-meta on
set convert-meta off

4.安装minTTY: mingw-get install msys-mintty,或去google code下载。

5.建立快捷方式,目标指向msys.bat,将属性改为 msys.bat –mintty

6.安装vim。注意要用msys版的,用gvim带的会有点问题。

6.5 通过配置~.minttyrc可以让mintty的默认颜色变好看,例如我的设置是这样:
Font=Monaco for Powerline
FontHeight=10
Locale=zh_CN
Charset=UTF-8
Transparency=low
FontIsBold=no
Rows=39
ClicksPlaceCursor=yes
BoldAsFont=yes
Term=xterm-256color
BoldAsColour=yes

Black=0,0,0
Red=220,50,47
Green=133,153,0
Yellow=181,137,0
Blue=38,139,210
Magenta=211,54,130
Cyan=42,161,152
White=238,232,213
BoldBlack=0,43,54
BoldRed=203,75,22
BoldGreen=88,110,117
BoldYellow=101,123,131
BoldBlue=131,148,150
BoldMagenta=108,113,196
BoldCyan=147,161,161
BoldWhite=253,246,227
ForegroundColour=238,232,213
BackgroundColour=0,0,0
CursorColour=133,153,0

7.为了tab。安装windowTabs,设为只用于minTTY.exe。试用版的只能group最多三个tab。(我没说过有xx版)
另外,也可以选择conemu来增加实现tab。
update: mintty现在已经支持快捷键在不同窗口中切换,而且屏幕够大的时候我其实比较喜欢平铺多个窗口,所以我现在已不再觉得tab有那么必要。

8.minTTY的字体设置为Lucida Console-11pt(也可以设为其他等宽字体), locale设为en_US, 透明度设为low, char-set设为UTF8(这是为了在服务器正常使用中文,如果想在win本地看中文,设为default或GBK)。

9.svn: (来自)
mingw-get install msys-wget
mingw-get install msys-unzip
wget http://sourceforge.net/projects/win32svn/files/1.7.6/apache22/svn-win32-1.7.6.zip/download
unzip svn-win32-1.7.6.zip
cd svn-win32-1.7.6
mv bin/* {你的mingw目录}/bin/

10.git: http://msysgit.github.com/
记得选 “不要给老子自动转换换行符”

11.python: http://www.python.org/getit/

12.安装 python setuptools:
wget -q http://peak.telecommunity.com/dist/ez_setup.py
python ez_setup.py
显示 downloading xxx.egg,中断,手动进行:
wget xxx.egg
再次 python ez_setup.py

注意:进入python交互模式会没有反应,这是因为python没有识别mintty为终端。加-i参数就勉强可以。但这个问题并不只是python有,另外一些交互命令行程序也会有。mintty这个问题的issue在google code上

* 2015.3.2 update: 难以置信!其实只要用Cygwin及其自带的mintty,就没有这个问题了!解决方案居然如此简单!完全没有道理!(来自该老外的blog

13. 使用源于@mockee又被我精心山寨过的vim配置一锅端.

可以在win里面装个patch过的Powerline字体(用linux的就行),然后就可以开启华丽的Powerline_symbols = ‘fancy’ 模式了

生成自签名ROOT CA

一、生成ROOT CA
1)download openssl
https://sourceforge.net/projects/openssl/files/?source=navbar

2) 生成private key
openssl genrsa -out cakey.pem 2048
生成 pub key
openssl rsa -in cakey.pem -pubout -out ca_pub.key

3) 生成根证书
openssl req -new -days 18250 -x509 -key cakey.pem -out cacert.pem -nodes -subj “/C=CN/ST=BJ/L=AABB/O=Thrushsoft/OU=Thrushsoft/CN=Thrushsoft/emailAddress=admin@thrushsoft.com”
copy cacert.pem cacert.cer

check:
openssl x509 -in cacert.pem -subject -nameopt multiline -nameopt show_type
openssl req -in userreq.pem -subject -nameopt multiline -nameopt show_type
openssl req -in userreq.pem -text -noout
openssl req -in usercert.pem -text -noout

4) 把文件放对位置
4-1) 在cmd(需管理员权限)中打开certmgr.msc,导入cacert.cer
4-2) 建立目录demoCA/newcerts和demoCA/private
4-3) copy cakey.pem demoCA/private
4-4) copy cacert.pem demoCA
4-5) 建立文件demoCA/index.txt(空文件)和demoCA/serial(内容为01)

二、根证书签名的服务器证书
1)生成user key
openssl genrsa -out userkey.pem 2048
2)生成服务器证书
openssl req -new -sha256 -key userkey.pem -out userreq.pem -subj “/C=CN/ST=BJ/L=AABB/O=Thrushsoft/OU=Thrushsoft/CN=thrushsoft.com” -config openssl.cfg
openssl req -new -key userkey.pem -out userreq.pem -config openssl.cfg

3)用CA签名
openssl ca -days 18250 -in userreq.pem -out usercert.pem
4)导出成P12,以便IE导入
openssl pkcs12 -export -inkey userkey.pem -in usercert.pem -out userkey.p12

注:其中-sha256是生成sha256加密算法,据说2017年1月1日开始Firefox要封杀sha1了,不加不行啊。ROOT CA 倒是可以仍然sha1