linux expect 字符串,expect spawn、linux expect 用法小记

linux expect 字符串,expect spawn、linux expect 用法小记使用 expect 实现自动登录的脚本 网上有很多 可是都没有一个明白的说明 初学者一般都是照抄 收藏 可是为什么要这么写却不知其然 本文用一个最短的例子说明脚本的原理 脚本代码如下 1 usr bin expect2setti lusername192 168 1 14expect password 5send ispass r 6i

使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄、收藏。可是为什么要这么写却不知其然。本文用一个最短的例子说明脚本的原理。

脚本代码如下:

1 #!/usr/bin/expect

2 set timeout 30

3 spawn ssh -l username 192.168.1.1

4 expect “password:”

5 send “ispass\r”

6 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]

执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行

dbf417a173fec044e4e8456908f5894d.gif

#!/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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225208.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午9:51
下一篇 2026年3月17日 上午9:51


相关推荐

  • 一只龙虾的三次蜕皮:OpenClaw爆红30天全记录盘点

    一只龙虾的三次蜕皮:OpenClaw爆红30天全记录盘点

    2026年3月13日
    2
  • php 正则判断是否是手机号码 最新

    php 正则判断是否是手机号码 最新phonenumber if preg match 1 34578 1 d 9 phonenumber echo 是手机号码 else echo 不是手机号码

    2026年3月19日
    1
  • 单调队列问题「建议收藏」

    单调队列问题「建议收藏」SlidingWindow题目传送:POJ-2823-SlidingWindow闲来没事学学单调队列的写法,嗯,一个很奇怪的队列形式。。单调队列是指:队列中元素之间的关系具有单调性,而且,队首和队尾都可以进行出队操作,只有队尾可以进行入队操作。因为这里是滑动窗口,每次移动需要进行更新,所以可以用单调队列来实现。本题用单调递增队列来求每一个区间的最小值,用单调递减队列来求每一个区间的最大值

    2022年6月25日
    32
  • git 创建邮箱 用户名_初次安装git配置用户名和邮箱及密钥

    git 创建邮箱 用户名_初次安装git配置用户名和邮箱及密钥在 Windows 上使用 Git 可以从 Git 官网直接下载安装程序 网速慢的同学请移步国内镜像 然后按默认选项安装即可 安装完成后键盘敲上 windows r 你会看到 输入 cmd 敲回车打开命令行窗口 然后输入 git 如果出现下面这些提示说明 git 已经安装成功了 安装完成后 还需要最后一步设置 在命令行输入下面两条命令 gitconfigglo name 这里面填你的名字

    2026年2月13日
    2
  • 函数模板与同名的非模板函数不可以重载(重载的定义)

    关于函数的重载机制,是一个比较复杂的问题,其中涉及到了优先级定义和最佳匹配等问题,如果要阐述清楚,恐怕不是一两篇文章就能说的明白。但是如果掌握了一些常用的“规律”,对于了解程序对重载函数是如何进行选择也有很大的好处,本文尝试将自己理解的知识,结合下面简单的例子简略的说说函数重载机制,文章的摘录部分列出了一些关于程序如何选择重载函数的规则。:)例子如下:#include

    2022年4月15日
    103
  • ubuntu安装rabbitvcs[通俗易懂]

    ubuntu安装rabbitvcs[通俗易懂]安装RabbitVCS的方法步骤如下:第一步:将rabbitvcs的添加到源里面。(次操作会提示是否要添加到源里面,点击ENTER添加,Ctrl+C不添加),这里选择ENTER方便更新。sudoadd-apt-repositoryppa:rabbitvcs/ppa第二步:根据第一步的情况来是否跳过该步骤,如果第一步出现导入key,那第二步可以跳过,否则需要导入keysudo

    2022年7月18日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号