文章分类 » python

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` 接收文件

unamed

转一个牛人的经验贴
—————
发信人: SlutteryWolf (一生懸命|情色·猥琐·变态·双子狼), 信区: Python
标 题: Tornado的实现还是很强大的
发信站: 水木社区 (Wed Jan 5 13:19:28 2011), 转信

这段时间自己把iostream.py实现了一下,顺便给socket打了个补丁,发现了好几个
有趣的点:

1. socket的C实现中,对于recv函数,直接返回新生成的字符串比传入缓冲区写还要
快。 大概能快10%。代码稍后附上,大家可以自由cProfile (./python -m
cProfile yourcode.py)。

2. Python的速度大大逊于原生代码。
用cProfile做了些调优后的感想。不过大家用Python都是冲着顺手易用去的,所以这
一点倒也无可厚非。

3. Python的List(含string)操作是高度优化过的。
我曾经试图用自己管理的bytearray缓冲区来替代原生的string,因为源代码里面包
括了大量的+=和区段赋值操作,以提高性能。
但是我错了,而且错的很离谱。
现在的bytearray1[x:length] = bytearray2[y:length]操作和我自己写的
memcpy(bytearray2, y, bytearray1, x, length)几乎一样快。
而且如果是反复调用string_a += random_string_b,并不会每次重新分配内存并做
拷贝操作,和预先分配一块内存做搬运基本一样快。

4. 函数调用在Python里面的开销是不小的。对于较为关键的代码,建议手工
inline。当然如果对性能要求再高建议直接C.

5. 用 not not collection_var 来代替 len(collection_var) > 0 的判断语
句。

6. 对于deque,访问deque.popleft,然后根据判断再deque.appendleft,比直接
deque[0]要快。

总之,Tornado的实现考虑到了以上中的大部及重点,如1和3. 它的实现蛮强大,大家
放心使用。。。

———–
post by gmail~

多线程使用pycurl时出现段错误(segmentation fault)

http://www.python-forum.org/pythonforum/viewtopic.php?f=5&t=9395

只需要加一个选项

client.setopt(pycurl.NOSIGNAL, 1)

文档的解释

Pass a long. If it is 1, libcurl will not use any functions that install signal handlers or any functions that cause signals to be sent to the process. This option is mainly here to allow multi-threaded unix applications to still set/use all timeout options etc, without risking getting signals. (Added in 7.10)

If this option is set and libcurl has been built with the standard name resolver, timeouts will not occur while the name resolve takes place. Consider building libcurl with c-ares support to enable asynchronous DNS lookups, which enables nice timeouts for name resolves without signals.