文章标签 » linux

fix:ssh主机管理工具~

从一开使用ubuntu,到后来换到mac,一直使用系统自带的ssh命令,上传文件使用scp命令,由于平时使用并不频繁,也不觉得麻烦。再后来每天用到的机器多了,就不得不每次去公司wiki上查一下机器名,然后粘贴一下,次数多了,就迫切需要一个能像securecrt一样管理主机列表的功能。
首先发掘的用的是mac自带终端

这个用了不到一周,发现撮的不行,总是会新开一个窗口,不能在新标签中打开,只能手工再从菜单里选一个合并所有窗口。再高级点的功能搜索,分组更是木有。。

之后装了一个mac版securecrt,当然对于我来说,securecrt就比mac自带终端多一个好用的列表管理,其他功能基本不用。。,用了一个月到期啦。。。

嘿嘿,对于猿类来说,最终极的解决方案就是自己写一个,于是有了这个简单,易用的ssh列表管理脚本sshgo (http://github.com/emptyhua/sshgo),是个python写的命令行小脚本,只依赖python>=2.4, 不需要gui,所以不但可以本地使用,也可以很方便的放到跳板机上使用。

软件特性:

  • 单python文件,仅依赖python版本 >= 2.4,适用于mac,linux系统
  • 分组功能
  • 搜索功能(支持python正则表达式)

使用方法:

将主机列表文件放置在~/.ssh_hosts,使用tab或4个空格来创建分组结果,举个例子:

Home
    root@192.168.1.106
Work
    root@comp1 -p 9999
    root@comp2 -p 9999
    root@comp3 -p 9999
VHost
    VMWare
        test@vm1
        test@vm2
        test@vm3
        test@vm4
    VirtualBox:
        test@vbox1
        test@vbox2
        test@vbox3
        test@vbox4
MacOS
    hi@mymac

然后下载管理脚本

wget "https://raw.github.com/emptyhua/sshgo/master/sshgo" -O ./sshgo
#添加执行权限
chmod +x ./sshgo
#GO,就可以看到前面截图所示的效果了
./sshgo

快捷键:

  • 退出: q
  • 向上滚动: k
  • 向下滚动: j
  • 选择主机: space
  • 搜索: /
  • 退出搜索结果: q
  • 展开分组: o
  • 收起分组: c
  • 展开所有分组: O
  • 收起所有分组: C

使用Zmodem?

Zmodem的确是另一个偶尔会用下的功能,可以通过安装zssh实现,在Mac下可以通过macports安装

sudo port install zssh lrzsz

假如安装了zssh,sshgo会优先使用zssh连接主机。连接前zssh会有提示

Press ^@ (C-Space) to enter file transfer mode, then ? for help
#意思是按ctrl + 空格进入文件传输模式(Mac下的这个组合已经被右上角的Spotlight搜索功能占用了,可以在快捷键设置里给他换到其他快捷键组合)

上传文件

按ctrl + 空格进入文件传输模式,之后使用`sz example.txt`上传文件

下载文件

在服务端`sz example.txt`,然后ctrl + 空格,然后`rz` 接收文件

定制一个Debian Live启动盘

这blog都快荒了~~,前些日子自己做了一个debian live的启动盘,把制作过程分享一下。文章适合喜欢linux并有使用经验的用户。

我做的debian live镜像有136M,包含一个firefox浏览器,一些网卡驱动和一个xterm.它的目标很明确,就是给使用者一个可以上网的环境。

窗口管理器采用了openbox,最开始用gnome,生成的镜像已经500多M了。。自带了一堆小软件,精简起来是个麻烦事。下面的任务栏使用tint2,输入法使用scim,网络管理使用wicd.关于这些软件的配置后面会介绍。

下面开始介绍制作和精简过程:

首先要有一个debian环境,俺用的是虚拟机里装的Debian6.02.有个真机版,但是已经被霸占。

第一步: 安装live制作工具live-build,实际使用的版本是2.0.12-1:

sudo apt-get install live-build

第二步:创建工作目录,生成初始配置文件

mkdir ~/live
cd ~/live
lb config

这时会生成一些默认配置,很多,但是用到的就几个

.
├── auto
│   ├── functions
│   └── scripts
└── config
    ├── binary
    ├── binary_debian-installer
    ├── binary_debian-installer-includes
    ├── binary_grub
    ├── binary_local-debs
    ├── binary_local-hooks
    ├── binary_local-includes
    ├── binary_local-packageslists
    ├── binary_local-udebs
    ├── binary_rootfs
    ├── binary_syslinux
    ├── bootstrap
    ├── chroot
    ├── chroot_apt
    ├── chroot_local-hooks
    ├── chroot_local-includes
    ├── chroot_local-packages
    ├── chroot_local-packageslists
    ├── chroot_local-patches
    ├── chroot_local-preseed
    ├── chroot_sources
    ├── common
    ├── includes
    ├── source
    └── templates

第三步:修改默认配置文件
修改config/common,

LB_APT_RECOMMENDS="false"
#禁用apt-get的推荐功能
#使用apt-get安装软件时会附带一些它觉的有必要一块装的东西,这无疑会安装一些不必要的软件增大生成live的尺寸
LB_CACHE_INDICES="true"
#是否缓存apt的软件索引,默认是false,如果网络比较好,建议不要缓存,但是我的网络比较差,不想每次都下载软件包索引

修改config/bootstrap,live-build在bootstrap阶段会构建一个最基本的debian系统,将会读取该配置文件

LB_ARCHITECTURE="amd64" 
#amd64->64位版本
#i386 -> 32版本
#这里选64位,现在内存普遍超越4G了
LB_DISTRIBUTION="squeeze"
#指定debian的发行版本,这里使用最新的稳定版本squeeze
LB_ARCHIVE_AREAS="main contrib non-free"
#由于要安装一些nonfree的软件,要修改一下apt的“尺度”,默认是 main
#其他还有软件源的配置,我这里用cdn.debian.net反而比163的快

修改config/chroot, live-build将会在构建live的文件系统时使用该配置

LB_HOOKS="minimal"
#制定一个钩子脚本,lb将在构建完根目录后调用,默认为空
#minimal将会调用/usr/share/live/build/hooks/minimal这个清理脚本
#minimal将会清理apt缓存,删除/var/log下的一些无用文件,但是清理力度
#依然不够,后面我们会添加自己的清理脚本
LB_PACKAGES_LISTS="bluehua"
#指定我们要安装的软件列表 
#bluehua代表了config/chroot_local-packageslists/bluehua.list这个文件

然后继续修改config/binary,来定制我们要生成的介质类型

LB_BINARY_IMAGES="iso-hybrid"
#usb-hdd生成可以写入usb的镜像
#iso-hybrid生成可以写入光盘的镜像
LB_BOOTAPPEND_LIVE="locales=zh_CN.UTF-8"
#定制linux启动参数,这里我们指定一下系统的语言
LB_MEMTEST="none"
#为了减小尺寸,不要包含memtest

第四步:定制自己的软件列表
直接给出我的软件列表
config/chroot_local-packageslists/bluehua.list

xinit
xserver-xorg
x11-xserver-utils
#基本的X系统

user-setup
#可以在系统启动时自动创建一个用户

locales
#本地化信息

xfonts-wqy
#文泉驿的中文字体

openbox
#openbox窗口管理器

tint2
#任务栏

feh
#feh用来设置桌面壁纸

iceweasel
iceweasel-l10n-zh-cn
#firefox和中文语言包

flashplugin-nonfree
#浏览器的flash插件

wicd-gtk
#网络管理软件

xterm
#简单的终端软件

sudo
#没有sudo的系统怎么可以呢

scim
scim-pinyin
scim-gtk2-immodule
#scim中文输入法

hicolor-icon-theme
#一些常用的图标

alsa-base
alsa-utils
#让系统可以发出声音

firmware-bnx2
firmware-bnx2x
firmware-brcm80211
firmware-iwlwifi
firmware-linux
firmware-linux-free
firmware-linux-nonfree
firmware-ralink
firmware-realtek
#尽可能多的网卡驱动

到这里lb build运行一下,已经可以出来一个live的镜像文件,但是结果并不如您所愿,启动起来只是一个丑陋的默认X桌面。
我们要继续对安装的软件进行配置,下面给出部分配置。

首先我们要让openbox代替那个丑陋的默认X桌面

mkdir -p config/chroot_local-includes/etc/skel
#通过chroot_local-includes这个目录你可以向生成的live系统的文件系统里追加覆盖文件
#比如新建一个config/chroot_local-includes/test.txt
#那么当启动生成的live系统后,你会在根目录/找到test.txt这个文件

#/etc/skel这个目录里保存了新建用户目录的默认内容
#比如 sudo echo "set nu" > /etc/skel/.vimrc
#然后通过useradd -m testuser 增加一个新用户
#然后你会找到/home/testuser/.vimrc这个文件

新建 config/chroot_local-includes/etc/skel/.xinitrc
内容如下

exec openbox-session

OK,这样openbox就可以启动起来了(至于为什么,请google搜索x系统的启动过程),然后我们继续配置openbox
新建 config/chroot_local-includes/etc/skel/.config/openbox/autostart.sh 内容如下:

#!/bin/sh
export XMODIFIERS="@im=SCIM"
export XIM="SCIM"
export GTK_IM_MODULE="scim"
export QT_IM_MODULE="scim"
scim -d &
#启动输入法
tint2 &
#启动任务栏
(sleep 2 && iceweasel) &
#启动浏览器
(sleep 2 && wicd-gtk) &
#启动网络管理器
feh --bg-scale /usr/share/wallpagers/debian.png
#设置一张壁纸
#已经事先放到config/chroot_local-includes/usr/share/wallpagers/debian.png 了

之后不要忘了加执行权限

费了这么大功夫,终于算差不多了,运行一下lb build,喝杯茶的功夫再回来,应该看到有生成的binary-hybrid.so,但是大小应该接近200M的样子.下面将介绍我们的清理脚本,清理脚本应该放到config/chroot_local-hooks。这个目录下的脚本,将在live系统的文件系统构建完成之后执行。
cat config/chroot_local-hooks/03-remove-docs.sh 内容如下

#!/bin/sh

echo "remove unused packages"

apt-get remove -y --purge aptitude
apt-get remove -y --purge libg11-mesa-dri
apt-get remove -y --purge nano
apt-get remove -y --purge manpages
apt-get remove -y --purge openbox-themes 
apt-get remove -y --purge iptables 

#上面将删除一些用不到的软件,man手册比较大

apt-get -y autoremove
apt-get -y clean 


rm -rf /var/cache/flash*
#删除flash插件安装过程中下载的临时文件

echo "remvoe all docs"
rm -rf /usr/share/doc/*
rm -rf /usr/share/doc-base/*
#删除所有文档

echo "remove all man docs"
rm -rf /usr/share/man/*
#删除自带的一些man文档

echo "remove apt lists"
rm -rf /var/lib/apt/lists/*

echo "remove apt cache"
rm -rf /var/cache/apt/*.bin
#删除apt缓存

locale-gen

if cd /usr/share/locale;then
ls -1|grep -v zh_CN|grep -v locale|xargs rm -rf "{}"
fi

#删除除了zh_CN之外的所有本地化信息

#remove some driver
rm -rf /lib/modules/*/kernel/drivers/isdn
rm -rf /lib/modules/*/kernel/drivers/media
#删除不常用的驱动

同样不要忘了加执行权限,有了这个神奇的脚本,live的尺寸就可以降到136M~

总结如下:

1 简单的三个命令 lb config 生成默认配置,lb build 构建live系统,lb clean 清理。
2 需要安装的软件列表放到config/chroot_local-packageslists/xxxx.list,并在config/chroot里通LB_PACKAGES_LISTS指定
3 需要覆盖到生成系统中的文件放到config/chroot_local-includes
4 用户home目录的默认配置文件放到config/chroot_local-includes/etc/skel
5 需要在系统构建完成之后执行的动作放到config/chroot_local-hooks

postfix出错一则

能收到邮件但是发不出去

错误日志如下

Nov  4 20:32:21 localhost postfix/cleanup[4853]: warning: 51CCA2E129: virtual_alias_maps map lookup probl         em for xxxx@gmail.com
Nov  4 20:33:21 localhost postfix/pickup[4851]: 587A12F5F5: uid=0 from=
Nov  4 20:33:21 localhost postfix/cleanup[4853]: warning: connect to mysql server localhost: Can't connec         t to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

原因是之前配置了基于mysql的地址映射

virtual_alias_maps = mysql:/etc/postfix/mysql-alias.cf 

当一些在chroot环境中运行的postfix组建试图通过/var/run/mysqld/mysqld.sock连接数据库时就报错了,在master.cf里禁用smtp,rewrite,cleanup的chroot即可

smtp      inet  n       -       n       -       -       smtpd
rewrite   unix  -       -       n       -       -       trivial-rewrite
cleanup   unix  n       -       n       -       0       cleanup

#这是一种不安全的fix方法,另一种解决方法是修改my.conf同过3306端口访问mysql,也可以解决问题。

bash拼音补齐靠谱版本

之前玩ubuntu的时候写过一个,功能和代码都较丑,用的拼音库也很烂。正好为项目抓了一个靠谱的拼音库,顺便把这个bash补齐又重新实现了下,Mac上也可以用了~

项目:http://code.google.com/p/bash-pinyin-completion/

==特性==
* 支持拼音首字母匹配和完全匹配
* 支持多音字匹配

安装

ubuntu

支持10.04,10.10,11.04版本从ppa安装,如果之前安装过那个chs-completion先卸载之

sudo add-apt-repository ppa:emptyhua/toolbox
sudo apt-get update
sudo apt-get install bash-pinyin-completion

然后新开一个终端,就可以使用拼音补齐了

Mac OS X

对于mac需要先安装 bash-completion

sudo port install bash-completion

然后编辑~/.bash_profile,把下面的代码贴进去

if [ -f /opt/local/etc/bash_completion ]; then
. /opt/local/etc/bash_completion
fi

下载源码包http://code.google.com/p/bash-pinyin-completion/downloads/list

unzip bash-pinyin-completion-xxx.zip
cd bash-pinyin*
make
sudo make install

然后新开一个终端,就可以使用拼音补齐了

linux中tty设备名的由来

tty是teletypewriter(电传打字机)的简称,电传打字机是一种老式的通信工具,类似于传真,它有一个用于输入的键盘和用于输出接收信息的纸带打印设备。当按下按键后,电传机会把对应的键码编码成电流脉冲发送给接收方。对方收到脉冲后解码,并将对应的字符打印到纸带上。

早期的一些计算机便使用电传机来做输入输出设备。用户通过电传机向计算机输入指令,并通过纸带打印计算机的反馈结果,这便是最原始的command line interface(命令行交互)。

unix系统会为所有设备在/dev目录下生成对应的文件,电传机便被命名为/dev/tty#(#代表数字序号)。虽然现在的计算机早已经不再使用电传机做IO设备,但是tty的命名依然沿用至今。

links:
http://www.linfo.org/teletype.html
http://baike.baidu.com/view/1773688.htm