专栏首页程序手艺人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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 技术人的公众号

    程序手艺人
  • 『 利器篇 』Lepthon代码片段收集Gist

    平时工作中遇到好的代码结构,如果平时没有积累起来,当你真正想用的时候,查找起来的时间成本可就高了,我们平时可以借助一些代码管理工具,把我们曾经的写的Demo,好...

    程序手艺人
  • Git 使用常用问题

    参考 fatal: could not open ‘.git/COMMIT_EDITMSG’: Permission denied 直接删除’.git/CO...

    程序手艺人
  • shell 常用命令

    expect 命令是用来实现自动化交互通信的,比如当你在脚本中通过某些命令登录、连接、上传、下载等和远程服务器的交互时,可能需要让你输入一些账号、密码等信息

    请叫我大苏
  • shell expect权威指南和实战

    我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器...

    sunsky
  • 重磅!一文彻底读懂智能对话系统!当前研究综述和未来趋势

    作者:蒙 康 编辑:王抒伟 笔者在最近的研究中发现了一篇非常好的有关对话系统的论文,《A Survey on Dialogue Systems:Recent...

    机器学习算法工程师
  • 【每日算法Day 91】求解数组中出现次数超过1/3的那个数

    这是求解众数的升级版: 【每日算法Day 90】5种方法:求解数组中出现次数超过一半的那个数[2]但是这题没有保证一定存在满足条件的数,不过不要紧。

    godweiyang
  • String.valueOf()

    1. 由 基本数据型态转换成 String String 类别中已经提供了将基本数据型态转换成 String 的 static 方法 也就是 String....

    猿人谷
  • Python(一)让你的代码更加pythonic

    pythonic就是让你的代码更加具有python特色,通常是利用python独有的一些语法实现的。pythonic的代码往往更加简洁、优美和高效,不信你接着往...

    一只羊
  • 实例入门 Vue.js 单元测试

    作为一个以 文档丰富 而广为人知的前端开发框架, Vue.js 的官方文档中分别在《教程-工具-单元测试》、《Cookbook-Vue组件的单元测试》里对 Vu...

    江米小枣

扫码关注云+社区

领取腾讯云代金券