一不小心自己也有三台虚拟机了,每次都ssh -username@ip 然后在输入密码着实蛋疼,第一反应时脚本登录,但是作为脚本是逐行执行命令,是无法做到等待一个密码提示出现在输入密码的。查到mac下可以通过expect(具体是spawn,expect,send三条功能),win类似也有expect工具。感觉应该是个运维技巧。
ok,安装expect,根据INSTALL,README,要装expect现状tcl(另一个包),http://www.tcl.tk/software/tcltk/download.html,tcl的话解压出来我直接进入的unix目录下,因为macosx下README说mac下当成unix装也没啥事,而且我在macosx下make不过是什么鬼。。。安装没什么注意的,./configure make makeinstall is enough。装完tcl记得看下安装的路径,我的是在/usr/local/lib/。
之后再下载expect包,https://sourceforge.net/projects/expect/files/Expect/5.45/。这里解压之后放到tcl一起,我的话即/usr/local/lib/,然后make时候make expect说是可以只装expect相关组件,难道还有别的???,不管,我直接make之后install了。
然后我们就具备了expect的主要功能了。
代码如下:
#!/usr/bin/expect -f /usr/bin/expect这个路径安装完expect之后 which expect可以查看 set timeout -1 set password bugaosuni spawn ssh myname@serverip expect "*assword:*" // 等待密码提示显示 send "$password\r" // 登录 interact //done
然后很受伤的是这个脚本已经不能当普通sh来执行了。得用expect 命令执行。具体就是 expect myLogon.sh 。期间若是不可执行 chmod +x myLogon.sh。
OK 用户密码都在logon.sh里面了。