版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
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
分享到:
相关推荐
4. **Interact**: 当expect脚本执行完毕后,使shell回到交互模式,允许用户继续与进程进行交互。 #### 三、实现从普通用户自动切换到root用户的示例 假设我们有一个普通用户`test`,需要自动切换到root用户并输入...
关于自动化脚本expect的一个例子。本脚本功能是 实现自动输入密码登录到一个server机器上。
在脚本中使用`sudo`时,如果脚本需要连续多次执行`sudo`命令,手动输入密码会打断脚本的连续性。为了解决这个问题,我们可以使用`sudo`的`-S`选项,该选项允许通过标准输入(stdin)传递密码。但是,直接在脚本中明...
此脚本会在kinit提示输入密码时自动输入,避免了因kinit票证过期导致的登录中断。 为了实现定时登录,你可以将expect脚本与Linux的cron定时任务结合。打开crontab配置文件(`crontab -e`),添加一条定时任务,例如...
下面是一个简单的expect脚本示例(名为scp.exp),用于实现自动输入密码的scp命令: ```bash #!/usr/bin/expect set timeout 20 if { [llength $argv] puts "Usage:" puts "$argv0 local_file remote_path" ...
现在,每次需要登录远程服务器时,只需运行这个expect脚本即可,无需手动输入密码。但请注意,这种方式虽然方便,但也要注意安全性。如果你的私钥被他人获取,他们也能无密码访问你的服务器。因此,要确保私钥文件的...
通过本文,我们了解了expect这一强大工具的基本概念、工作原理及其应用场景,并通过一个具体的示例深入了解了expect脚本的编写方法。expect不仅能够极大地提高系统的运维效率,还能够降低人为错误的风险,是Linux...
该脚本可以自动地输入密码,并执行相关的命令。 4. 用户和组的管理:在 Linux 系统中,用户和组是非常重要的概念。我们使用 Expect 脚本来添加新的用户和组,并对其进行密码修改。 5.Shell 脚本的使用:我们使用 ...
这时,我们可以利用`expect`工具来实现脚本自动输入密码的功能。 `expect`是一个Tcl扩展,它允许脚本等待并响应特定的输出,常用于自动化与交互式程序的交互。在Linux脚本中使用`expect`,我们可以模拟用户输入,...
在ssshHost.sh脚本中封装expect的ssh登录自动填充密码功能
这对于自动化那些需要手动输入密码、确认信息或者处理复杂交互流程的任务非常有用,比如 SSH 登录、FTP 文件传输、软件安装等。 在 Windows 下使用 Expect,你可以实现以下功能: 1. 自动化SSH登录:编写 Expect ...
### Expect脚本学习教程与范例 #### 一、Expect简介及应用场景 **Expect** 是一个免费且强大的编程工具,主要用于实现自动化与交互式的任务处理,尤其适用于那些原本需要人工干预的任务。它允许用户创建脚本来自动...
免密登录是SSH的一种便捷功能,它允许用户在不同的主机之间进行无密码验证的登录,极大地提高了工作效率,特别是在大数据集群环境中,频繁的手动输入密码会变得非常繁琐。本文将详细介绍如何使用shell和expect脚本在...
Expect脚本是一种强大的自动交互工具,它可以模拟用户的交互行为,自动输入密码、命令等,从而实现自动化任务。下面是 Expect 脚本的安装和简单脚本示例。 Expect 脚本安装 ---------------- 要使用 Expect,需要...
今天需要做一个定时任务脚本将最新的数据包文件传到远程的服务器上,虽然有密钥但也是要求输入密码的那种,所以只能另想办法实现让脚本自动输入密码了。 从网上查到使用expect可以,简单研究了一下,效果不错。 ...
参考了java版的expect4j,expectj的原理,进行了极大的简化,可完成基本的功能: 1,运行java代码,执行交互式命令 2,sudo提权,自动输入密码(echo "password" | sudo -S mkdir /opt/test)
- **解决方案:** 使用Expect脚本自动处理登录过程,并执行预定义的命令序列。 ##### 3. **网络设备配置更新** - **背景:** 在大型网络环境中,手动更新每台设备的配置是一项耗时的任务。 - **解决方案:** 编写...
`expect`工具就是为了解决这个问题而诞生的,它允许我们在脚本中模拟用户输入,尤其在需要输入密码或确认操作等交互场景下非常有用。`expect`基于TCL语言,它提供了一种简洁的方式来编写脚本,使得自动化过程更加...
通过`spawn`启动SSH进程,并使用`expect`和`send`组合来自动输入密码并登录。此外,还通过`interact`命令将控制权交给用户进行后续操作。 通过这些示例和解释,我们可以看到无论是使用Expect还是Python,模拟键盘...
出于安全考虑,SSH在连接远程主机时会要求输入密码,但在脚本自动化场景中,这种交互式输入密码的方式是不可接受的。为了解决这一问题,这篇博文介绍了如何使用expect工具实现shell脚本中的SSH无交互自动登录。 ...