linux ssh自动输入密码,expect使用
想搞一个使用ssh登录批量ip地址执行命令,自动输入密码的脚本,但是ssh不能使用标准输入来实现自动输入密码,于是了解到了expect这个可以交互的命令
- 是什么
- 查看使用man查看expect,是这么说的,使用谷歌翻译一下
Expect is a program that "talks" to other interactive programs according to a script. Following the script, Expect knows what can be expected from a program and what the correct response should be. An interpreted language provides branching and high-level control structures to direct the dialogue.
In addition, the user can take control and interact directly when desired, afterward returning control to the script. - 我是这么理解的,expect是一个程序,更准确来讲是一个解释型语言,用来做交互的
- 查看使用man查看expect,是这么说的,使用谷歌翻译一下
- 命令
- 常用命令
spawn:开启一个进程,后面跟命令或者程序(需要做交互的,比如ssh)
expect:匹配进程中的字符串
exp_continue:多次匹配时用到
send:当匹配到字符串时发送指定的字符串信息
set:定义变量
puts:输出变量
set timeout:设置超时时间
interact:允许交互
expect eof:
- 常用命令
- 简单用法
- ssh登录ip,自动输入密码,vim ~/sshlogin
#!/usr/bin/expect #使用expect解释器 spawn ssh root@192.168.56.101 #开启一个进程ssh
expect {
"yes/no" { send "yes\r"; exp_continue } #当匹配到"yes/no时,就是需要你输入yes or no时,发送yes字符串,\r带表回车;exp_continue继续匹配
"password:" { send "sanshen6677\r" } #当匹配到password,就是该输入密码,发送密码,并\r回车。注意{之前要有空格。
}
interact #允许交互,这样你就会留在登录之后的窗口,进行操作,没有interact程序执行完成后就跳回当前用户ip。 - 脚本使用方法
chmod +x sshlogin #添加权限直接执行
./sshlogin 或者
expect sshlogin #使用expect解释器执行 - 一般情况下用户名,ip,密码是需要作为参数传进去的,因为和bash不一样,所以使用$1接收是错误的。
#!/usr/bin/expect
set user [lindex $argv 0] #定义变量,接收从0开始,bash是从1开始
set ip [lindex $argv 1]
set password [lindex $argv 2]
spawn ssh $user@$ip
expect {
"yes/no" {send "yes\r"; exp_continue}
"password" {send "$password\r"}
}
interact - 执行一下
./sshlogin root 192.168.56.101 password123
- ssh执行命令,需要在尾部加expect eof
#!/usr/bin/expect
set user [lindex $argv 0]
set ip [lindex $argv 1]
set password [lindex $argv 2]
spawn ssh $user@$ip "df -Th" #执行一条命令
expect {
"yes/no" {send "yes\r"; exp_continue}
"password" {send "$password\r"}
}
expect eof - 也可以使用bash,内部调用expect
#!/usr/bin/bash 使用#bash解释器
user=$1
ip=$2
password=$3
expect << EOF spawn ssh $user@$ip "df -Th"
expect {
"yes/no" {send "yes\r"; exp_continue}
"password" {send "$password\r"}
}
expect eof EOFbash sshlogin root 192.168.56.101 sanshen6677 #使用bash执行
- ssh登录ip,自动输入密码,vim ~/sshlogin
linux ssh自动输入密码,expect使用的更多相关文章
- ssh自动输入密码脚本 切换目录脚本
利用expect的,首先查看expect,命令:which expect #!/usr/bin/expect -f spawn ssh 用户名@ip地址 expect "assword:&q ...
- 用expect实现SCP/SSH自动输入密码登录
在命令行ssh远程登录服务器和scp远程传输文件都需要交互式输入密码,无法像mysql登录数据库 mysql -uroot -p123456一样直接完成. 其实可以用脚本依赖expect来达到这一目的 ...
- Linux远程自动输入密码抓取远程资源
#!/usr/bin/expect -fset timeout 3000set sys_date [lindex $argv 0] #要抓取的文件日期spawn scp /data3/xiaorui/ ...
- Shell脚本交互之:自动输入密码
Shell脚本交互之:自动输入密码 2016年04月09日 19:41:26 zhangjikuan 阅读数:58208 标签: Shell交互自动输入密码expect重定向管道 更多 个人分类: A ...
- linux expect详解(ssh自动登录)
shell脚本实现ssh自动登录远程服务器示例: #!/usr/bin/expect spawn ssh root@192.168.22.194 expect "*password:&quo ...
- ssh采用expect实现自动输入密码登录、拷贝
1. 引言 最近做了一个项目,需要频繁与另一台主机进行文件的传输:中间想到了很多方式:FTP.samba.curl等,但是还是感觉scp最好用. SCP使用教程可参阅:http://www.jb51. ...
- linux 之 expect 交互操作(自动输入密码)
场景 需要实现执行一个命令,并自动输入密码. 实现 通过expect命令实现 spawn 交互程序开始后面跟命令或者指定程序expect 获取匹 ...
- linux ssh 不用密码自动登录的几种方法
1. 自动ssh/scp方法== A为本地主机(即用于控制其他主机的机器) ;B为远程主机(即被控制的机器Server), 假如ip为192.168.60.110;A和B的系统都是Linux 在A上运 ...
- Linux远程ssh执行命令expect使用及几种方法
expect命令实现脚本免交互 一.Linux下SSH无密码认证远程执行命令 在客户端使用ssh-keygen生成密钥对,然后把公钥复制到服务端(authorized_keys). 实现步骤: 1.客 ...
随机推荐
- 使用U盘的PE系统安装Windows10操作系统 - 初学者系列 - 学习者系列文章
今天闲来无事,就把windows 10的安装再重写一个文(以前写过一个:安装免费的正版Windows10操作系统 - 初学者系列 - 学习者系列文章 ). 1. 制作一个WinPE的U盘. 相信现 ...
- pytest封神之路第三步 精通fixture
首先放一句"狠话". 如果你不会fixture,那么你最好别说自己会pytest. (只是为了烘托主题哈,手上的砖头可以放下了,手动滑稽) fixture是什么 看看源码 def ...
- Node.js 从零开发 web server博客项目[express重构博客项目]
web server博客项目 Node.js 从零开发 web server博客项目[项目介绍] Node.js 从零开发 web server博客项目[接口] Node.js 从零开发 web se ...
- Jenkins持续集成git、gitlab、sonarqube(7.0)、nexus,自动化部署实战,附安装包,严禁转载!!!
导读 之前用的都是SVN,由于工作需要用到Git,求人不如求己,技多不压身,多学一项技能,未来就少求别人一次,系统的学一遍,自己搭建一整套环境,自动化部署(自动发版),代码质量检测等等(为啥不用doc ...
- 【C#上位机必看】你们要的Iot物联网项目来了
新阁教育喜科堂不得不说,工业圈是个比较奇怪的圈子,各种各样的项目需求都有,有的人就希望价格低,功能实现即可,有的人又不在乎价格,就要界面好看.最近有一个小伙伴又提出了这样的需求,用最简单的方式,最低的 ...
- PHP绕过disable_function
PHP绕过disable_function 常规绕过 exec exec执行command命令,但是不会输出全部结果,而是返回结果的最后一行. 想得到全部的结果,可以使用第二个参数,让其输出到一个数组 ...
- python语言开发环境配置
原作者:龙行天下-super 地址:https://www.cnblogs.com/longxingtianxia/p/10181901.html 要点:IDLE是一个轻量级python语言开发环境, ...
- LDA主题模型困惑度计算
对于LDA模型,最常用的两个评价方法困惑度(Perplexity).相似度(Corre). 其中困惑度可以理解为对于一篇文章d,所训练出来的模型对文档d属于哪个主题有多不确定,这个不确定成都就是困惑度 ...
- Spring源码系列(四)--spring-aop是如何设计的
简介 spring-aop 用于生成动态代理类(底层是使用 JDK 动态代理或 cglib 来生成代理类),搭配 spring-bean 一起使用,可以使 AOP 更加解耦.方便.在实际项目中,spr ...
- RocketMQ 笔记
Queue Topic和Queue是1对多的关系,一个Topic下可以包含多个Queue,主要用于负载均衡.发送消息时,用户只指定Topic,Producer会根据Topic的路由信息选择具体发到哪个 ...