场景描述
如果脚本中使用ssh 登录服务器,如何用shell实现自动输入密码呢? 其实有三种办法:
1.重定向
2.管道
前两种前提条件是指令必须有参数设置密码的输入方式,比如sudo -S 表示从标准输入中读取密码, 但是ssh 没有任何参数表示输入密码,只能使用第三种办法:
3. expect
主要适用于交互脚本中,详细参见1,内容比较多,这里只写如何解决自动用ssh登录服务器
- 和shell一样,需要安装expect 解释器: sudo apt-get install expect
- 新建的文件以*.exp结尾,需要包含 #!/bin/expect
- 运行: expect *.exp
#!/bin/expect
set timeout 15
spawn ssh root@ip
expect {
"(yes/no)" { send "yes\r"; exp_continue }
"*password:" { send "123\r"}
}
interact
解释如下:
- 设定超时时间15s
- spawn是expect的语句,执行命令前都要加这句;
- expect 上次的命令是否包含password:字符串
- send 执行交互动作,与手工输入密码类似,将密码发送出去
- interact 执行完成后,把控制权交给控制台
shell 中如何嵌入或调用expect语言
- shell 中嵌入expect有点复杂,这里不做介绍
- shell 中可以通过 expect test.exp 调用
参考
每天都有不同的任务,任务中包含中各种不同的知识点,唯有各种知识点理解清楚,才能够快速的完成大的任务.
新换的桌面系统,还是比较清新的。