Shell 交互输入

来源:互联网 发布:淘宝取现手续费多少 编辑:程序博客网 时间:2024/05/29 07:36

场景描述

如果脚本中使用ssh 登录服务器,如何用shell实现自动输入密码呢? 其实有三种办法:

1.重定向

2.管道

前两种前提条件是指令必须有参数设置密码的输入方式,比如sudo -S 表示从标准输入中读取密码, 但是ssh 没有任何参数表示输入密码,只能使用第三种办法:

3. expect

主要适用于交互脚本中,详细参见1,内容比较多,这里只写如何解决自动用ssh登录服务器

  • 和shell一样, 需要安装expect 解释器: sudo apt-get install expect
  • 新建的文件以*.exp结尾,需要包含 #!/bin/expect
  • 运行: expect *.exp
#!/bin/expectset timeout 15spawn ssh root@ipexpect {    "(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

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

这里写图片描述

原创粉丝点击