Shell 交互输入

前端之家收集整理的这篇文章主要介绍了Shell 交互输入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

场景描述

如果脚本中使用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 调用

参考

参考1 详细的描述expect的使用 语法
参考2 
参考3

每天都有不同的任务,任务中包含中各种不同的知识点,唯有各种知识点理解清楚,才能够快速的完成大的任务.
新换的桌面系统,还是比较清新的。

猜你在找的Bash相关文章