到公司以后,公司不能直接登录 到线上服务器,而必须通过一个中间服务器,中间服务器需要一个动态密码验证,无法自动化,于是很郁闷,分别尝试了三种办法
1. 在内网开tunel 端口,办公机直接ssh到这个端口即可.
Ok,但是一周后被公司安全组扫描 发现,禁止我继续这样.
2. 既然如此,我可以在内网用squid开http代理,或者用ssh开socks代理,然后连这个端口就行了
理论上也ok,而且被公司扫描到的可能性很小, 但是预防为主,所以没搞,
3. 用expect脚本登录,只需要手动输入一个动态密码就ok,而且使用ssh复用连接,下次不需要输动态密码
问题是expect脚本后,在服务器开screen ,之后resize gnome-console, screen会坏掉,这是一个悲剧,尝试了很久,没搞定这个问题,开始寻找能够发送键盘按键的软件(模拟按键)找到结果便是4,很赞:
4. xdotool:
xdotool是x11自动化测试工具,能够模拟键盘,鼠标的各种输入.
目前来看没问题,而且还能自动设置gnome-console的编码为GBK,大赞啊!!!
附Expect脚本:
#注意. alias r="export LANG=GBK && ssh.exp" #所有敏感部分被替换为 .... set pwd [lindex $argv 0] set timeout 3 spawn ssh ........ expect "......." { send "$pwd\r"}\ timeout {} expect "*......*" { send "ssh ............. \r" } expect "*password*" { send ".......\n" } expect "........ " { send "screen -ls\n" } interact
附xdotool脚本:
#!/bin/sh xdotool key alt+t Down Down Right Return # 这是相当于键盘按 alt+t ,出gnome-console的菜单,然后选择响应的项. xdotool type "r1" #实际上是 ssh xxx@xxx xdotool key Return Return xdotool type "ssh [email protected]" # 再ssh到别个机器 xdotool key Return Return sleep 0.3 xdotool type "xxxx" # 这里需要密码,因为中转机器无法记忆密码. xdotool key Return Return xdotool type "screen -ls" #真的命令. xdotool key Return Return xdotool type "screen -r "
这场懒人与公司制度的斗争还没有结束,继续。。。