`
yjhexy
  • 浏览: 332318 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

expect 脚本帮助输入密码登陆

阅读更多

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
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 楼 Anddy 2011-05-21  
之前用这个写过自动VPN。。在此了解到interact作用。。
3 楼 agapple 2011-05-13  
yjhexy 写道
agapple 写道
弄个信任登录就可以完成无密码登录,服务器上都是采用这样的方式。

我现在的公司要求弄密码,因为跳板机不需要VPN,外网知道密码就能登录。


信任登录,就可以像是一个证书。比如我们访问内网,单独给你发了个证书。凭着这个证书,服务器就可以信任你登录,而不需要你输入密码。
2 楼 yjhexy 2011-05-13  
agapple 写道
弄个信任登录就可以完成无密码登录,服务器上都是采用这样的方式。

我现在的公司要求弄密码,因为跳板机不需要VPN,外网知道密码就能登录。
1 楼 agapple 2011-05-12  
弄个信任登录就可以完成无密码登录,服务器上都是采用这样的方式。

相关推荐

    用expect 实现切换用户时自动输入密码.txt

    4. **Interact**: 当expect脚本执行完毕后,使shell回到交互模式,允许用户继续与进程进行交互。 #### 三、实现从普通用户自动切换到root用户的示例 假设我们有一个普通用户`test`,需要自动切换到root用户并输入...

    expect 脚本的简单例子

    关于自动化脚本expect的一个例子。本脚本功能是 实现自动输入密码登录到一个server机器上。

    linux编写bash shell脚本文件.sh 自动输入密码.在脚本中使用sudo命令,将密码保存在脚本中,不需要手动输入密码

    在脚本中使用`sudo`时,如果脚本需要连续多次执行`sudo`命令,手动输入密码会打断脚本的连续性。为了解决这个问题,我们可以使用`sudo`的`-S`选项,该选项允许通过标准输入(stdin)传递密码。但是,直接在脚本中明...

    linux-expect模拟键盘输入实现定时登录教程.zip

    此脚本会在kinit提示输入密码时自动输入,避免了因kinit票证过期导致的登录中断。 为了实现定时登录,你可以将expect脚本与Linux的cron定时任务结合。打开crontab配置文件(`crontab -e`),添加一条定时任务,例如...

    Shell脚本实现自动输入密码登录服务器

    下面是一个简单的expect脚本示例(名为scp.exp),用于实现自动输入密码的scp命令: ```bash #!/usr/bin/expect set timeout 20 if { [llength $argv] puts "Usage:" puts "$argv0 local_file remote_path" ...

    expect配置单向ssh免密码登录

    现在,每次需要登录远程服务器时,只需运行这个expect脚本即可,无需手动输入密码。但请注意,这种方式虽然方便,但也要注意安全性。如果你的私钥被他人获取,他们也能无密码访问你的服务器。因此,要确保私钥文件的...

    Linux经典脚本expect的示例及基本用法

    通过本文,我们了解了expect这一强大工具的基本概念、工作原理及其应用场景,并通过一个具体的示例深入了解了expect脚本的编写方法。expect不仅能够极大地提高系统的运维效率,还能够降低人为错误的风险,是Linux...

    远程批量修改linux服务器密码的脚本归类.pdf

    该脚本可以自动地输入密码,并执行相关的命令。 4. 用户和组的管理:在 Linux 系统中,用户和组是非常重要的概念。我们使用 Expect 脚本来添加新的用户和组,并对其进行密码修改。 5.Shell 脚本的使用:我们使用 ...

    Linux脚本自动输入密码

    这时,我们可以利用`expect`工具来实现脚本自动输入密码的功能。 `expect`是一个Tcl扩展,它允许脚本等待并响应特定的输出,常用于自动化与交互式程序的交互。在Linux脚本中使用`expect`,我们可以模拟用户输入,...

    ssshHost.sh脚本中封装expect的ssh登录自动填充密码功能.sh

    在ssshHost.sh脚本中封装expect的ssh登录自动填充密码功能

    expect window版本

    这对于自动化那些需要手动输入密码、确认信息或者处理复杂交互流程的任务非常有用,比如 SSH 登录、FTP 文件传输、软件安装等。 在 Windows 下使用 Expect,你可以实现以下功能: 1. 自动化SSH登录:编写 Expect ...

    expect脚本学习教程与范例

    ### Expect脚本学习教程与范例 #### 一、Expect简介及应用场景 **Expect** 是一个免费且强大的编程工具,主要用于实现自动化与交互式的任务处理,尤其适用于那些原本需要人工干预的任务。它允许用户创建脚本来自动...

    centos7 ssh免密登录自动化配置脚本(ps:已测试过)

    免密登录是SSH的一种便捷功能,它允许用户在不同的主机之间进行无密码验证的登录,极大地提高了工作效率,特别是在大数据集群环境中,频繁的手动输入密码会变得非常繁琐。本文将详细介绍如何使用shell和expect脚本在...

    expect脚本安装和一个简单的脚本

    Expect脚本是一种强大的自动交互工具,它可以模拟用户的交互行为,自动输入密码、命令等,从而实现自动化任务。下面是 Expect 脚本的安装和简单脚本示例。 Expect 脚本安装 ---------------- 要使用 Expect,需要...

    shell脚本无密码登录 expect的使用方法详解

    今天需要做一个定时任务脚本将最新的数据包文件传到远程的服务器上,虽然有密钥但也是要求输入密码的那种,所以只能另想办法实现让脚本自动输入密码了。 从网上查到使用expect可以,简单研究了一下,效果不错。  ...

    sudo提权自动输入密码--java执行交互式命令

    参考了java版的expect4j,expectj的原理,进行了极大的简化,可完成基本的功能: 1,运行java代码,执行交互式命令 2,sudo提权,自动输入密码(echo "password" | sudo -S mkdir /opt/test)

    Expect简介及应用,是一种能够强大的脚本语言

    - **解决方案:** 使用Expect脚本自动处理登录过程,并执行预定义的命令序列。 ##### 3. **网络设备配置更新** - **背景:** 在大型网络环境中,手动更新每台设备的配置是一项耗时的任务。 - **解决方案:** 编写...

    linux编写脚本使用expect正则表达式 教程

    `expect`工具就是为了解决这个问题而诞生的,它允许我们在脚本中模拟用户输入,尤其在需要输入密码或确认操作等交互场景下非常有用。`expect`基于TCL语言,它提供了一种简洁的方式来编写脚本,使得自动化过程更加...

    linux 模拟键盘输入

    通过`spawn`启动SSH进程,并使用`expect`和`send`组合来自动输入密码并登录。此外,还通过`interact`命令将控制权交给用户进行后续操作。 通过这些示例和解释,我们可以看到无论是使用Expect还是Python,模拟键盘...

    用于shell脚本无交互的ssh自动登陆(转载)

    出于安全考虑,SSH在连接远程主机时会要求输入密码,但在脚本自动化场景中,这种交互式输入密码的方式是不可接受的。为了解决这一问题,这篇博文介绍了如何使用expect工具实现shell脚本中的SSH无交互自动登录。 ...

Global site tag (gtag.js) - Google Analytics