版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://sysop.blogbus.com/logs/70787883.html
使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄、收藏。可是为什么要这么写却不知其然。本文用一个最短的例子说明脚本的原理。
脚本代码如下:
##############################################
#!/usr/bin/expect
set timeout 30
spawn ssh -l username 192.168.1.1
expect "password:"
send "ispass\r"
interact
##############################################
1. [#!/usr/bin/expect]
这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。
注意:这一行需要在脚本的第一行。
2. [set timeout 30]
基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒
3. [spawn ssh -l username 192.168.1.1]
spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。
它主要的功能是给ssh运行进程加个壳,用来传递交互指令。
4. [expect "password:"]
这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒
5. [send "ispass\r"]
这里就是执行交互动作,与手工输入密码的动作等效。
温馨提示: 命令字符串结尾别忘记加上“\r”,如果出现异常等待的状态可以核查一下。
6. [interact]
执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行
#!/usr/bin/expect #注意安装的路径,不确定 whereis expect 一下
# Change a login shell to bash
set user [lindex $argv 0]
spawn bash $user
expect "]:"
send "/bin/bash "
expect eof
exit
分享到:
相关推荐
昨天一个网友问如何能够将输入密码的工作在shell里面自动完成,研究了一下,发现这种交互式的工作,普通的shell实现不了,据说可以借助expect来搞定,所以初步学习了一下expect,成果和大家分享一下: 应用一: 实现...
关于自动化脚本expect的一个例子。本脚本功能是 实现自动输入密码登录到一个server机器上。
主要介绍了Shell脚本实现自动输入密码登录服务器,本文使用expect来实现这个需求,讲解了expect的安装及使用脚本,需要的朋友可以参考下
在ssshHost.sh脚本中封装expect的ssh登录自动填充密码功能
参考expect4j的交互式操作方式控制输入输出流实现批量执行多条shell命令同时支持切换用户输入密码提权执行命令输入密码等操作 有完整的测试用例,便于理解 模板化执行命令示例 [$]send[su - root] [Password:]...
今天需要做一个定时任务脚本将最新的数据包文件传到远程的服务器上,虽然有密钥但也是要求输入密码的那种,所以只能另想办法实现让脚本自动输入密码了。 从网上查到使用expect可以,简单研究了一下,效果不错。 ...
参考了java版的expect4j,expectj的原理,进行了极大的简化,可完成基本的功能: 1,运行java代码,执行交互式命令 2,sudo提权,自动输入密码(echo "password" | sudo -S mkdir /opt/test)
本篇文章给大家介绍在Linux中使用expect脚本实现远程机器自动登录,前提是要创建一个expec脚本ssh_expect,接下来定义一些命令别名等,下面跟着脚本之家小编一起学习学习吧
其实我们可以使用expect脚本自动输入密码,从而实现真正的周期备份。如果你不知道什么是expect,建议先请看这篇文章:https://www.jb51.net/article/197865.htm 二、思路 创建一个utils文件,里面存放shell脚本,...
shell+expect编写的 大数据集群ssh免密登录自动化配置脚本(带说明文档)
在实际开发中,运行shell脚本有时候会输入linux密码或者是mysql密码等,而expect可以帮我们输入。 二、安装 expect在linux系统中没有自带,需要我们自行安装,在Ubuntu系统下,安装命令如下 sudo apt-get update ...
如果没有其他身份验证选项可用,则在通过Jumphost设置到目标主机的穿梭连接时,Expect脚本可用于自动进行输入密码和TOTP代码的交互过程。 将为您填写的命令和提示示例: sshuttle -r [local sudo] Password: ...
但我到现在还在对python的恐惧之中(虽然已经在空闲时间努力去学习了),所以使用了shell和expect脚本结合的方式,写了这个批量scp的脚本工具。 expect用于自动化地执行linux环境下的命令行交互任务,例如scp、ssh...
mac 自动填写密码等脚本实现需要的工具包,包括expect tck tl 具体安装使用可以看这篇博客:https://blog.csdn.net/gongzi2311/article/details/70159930?utm_source=itdadao&utm_medium=referral
linux下自动输入密码,不用手动输入,shell自动化脚本,expect源码,官网下载不方便的开发者可以下载使用
expect是一个基于Tcl的用于自动交互操作的工具语言,它适合用来编写需要交互的自动化脚本,比如上面提到的SSH输入用户名密码,自动FTP等等场景。下面这篇文章主要给大家介绍了关于Linux expect实现自动登录脚本的相关...
该脚本由bash shell实现,功能类似expect,ssh到远程主机可以实现自动输入密码(密码验证模式下),用法比expect简单很多。 示例如下: $ ./autopass Usage: autopass -h host [-u user] [-p port] [-k password |...
运行脚本后,批量扫描主机自动执行ssh-copy-id,自动输入密码。完成批量主机ssh无口令配置
如果是密钥登录的话还比较好自动登录,如果是密码登录的话一般用expect,还可以使用sshpass expect expect是一个用来处理交互的命令。借助Expect,我们可以将交互过程写在一个脚本上,使之自动化完成。形象的说,ssh...