期望 ssh 脚本返回无效命令名

2024-03-15

我正在尝试编写一个 Expect 脚本,该脚本将 ssh 进入服务器,发送 sudo su,然后检查 iptables 状态并将输出放入服务器上的日志文件中。下面是脚本。

1 #!/usr/bin/expect
  2 exp_internal 1
  3 log_user 0
  4 set timeout 10
  5 set password  "******"
  6 
  7 spawn /usr/bin/ssh -l subhasish *.*.*.* -p 10022
  8 
  9 expect {
 10      -re "password: " {send "$password\r"}
 11      -re "$ "  {send "sudo su\r"}
 12      -re "[sudo] password for subhasish:" {send "$password\r"}
 13      -re "# "  {send "service iptables status\r"}
 14        }
 15 set output $expect_out(buffer)
 16 send "exit\r"
 17 puts "$output\r\n" >> output.log

但是在调试模式下运行时,我收到这样的错误;

expect -d testcase
expect version 5.44.1.15
argv[0] = expect  argv[1] = -d  argv[2] = testcase  
set argc 0
set argv0 "testcase"
set argv ""
executing commands from command file testcase
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {24105}
invalid command name "sudo"
    while executing
"sudo"
    invoked from within
"expect {
     -re "password: " {send "$password\r"}
     -re "$ "  {send "sudo su\r"}
     -re "[sudo] password for subhasish:" {send "$password\r"}
 ..."
    (file "testcase" line 9)

不知道我哪里出错了。它说无效的命令名称“sudo”,我想这是因为expect不理解这些命令。如何绕过它。请帮忙。谢谢。


问题出在这一行

-re "[sudo] password for subhasish:" {send "$password\r"}

在 Tcl 中(因此在 Expect 中),方括号是命令替换的语法(就像 shell 中的反引号)。因此,您要么需要转义括号,要么使用不同的引号来防止各种扩展:

-re {[sudo] password for subhasish:} {send "$password\r"}

这就带来了一个不同的问题:你期待看到这些确切的角色吗?因为您指示 Expect 将其视为正则表达式,并且正则表达式中的方括号表示字符类,所以它将匹配单个字符,即“s”、“u”、“d”或“o” '。所以你可能需要的是这样的:

-re {\[sudo\] password for subhasish:} {send "$password\r"}

or

-ex {[sudo] password for subhasish:} {send "$password\r"}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

期望 ssh 脚本返回无效命令名 的相关文章

  • expect spawn、linux expect 用法

    使用expect实现自动登录的脚本 xff0c 网上有很多 xff0c 可是都没有一个明白的说明 xff0c 初学者一般都是照抄 收藏 可是为什么要这么写却不知其然 本文用一个最短的例子说明脚本的原理 脚本代码如下 xff1a usr bi
  • __builtin_xxx指令学习【1】__builtin_expect

    builtin expect是GCC编译器提供的一个内置函数 xff0c 用于告诉编译器一个分支的执行概率 xff0c 以便编译器在生成机器码时进行优化 它的语法如下 xff1a span class token function buil
  • 如何使用 Linux Expect 脚本输入回答密码提示

    我在编写一个脚本来启动我的 forticlient vpn 命令行客户端并在出现提示时发送我的密码时遇到一些问题 这是我的代码 usr bin expect f set loadme forticlientsslvpncli server
  • 预计脚本问题

    我试图通过期望完成一项简单的工作 我想在 Linux VM 上使用 ssh keygen 命令创建 ssh 密钥 我的下面的期望代码看起来很简单 但它不起作用 usr bin expect spawn ssh keygen t rsa ex
  • 我可以在 Unix 中运行 jshell 吗?

    我想使用expect重定向jshell输入 以便我可以在录制的演示中模拟输入 但是 尽管我可以从 Expect 脚本生成一个 jshell 进程 该进程也可以识别 jshell 提示符 但之后就没有任何效果了 期望输出看起来像控制序列 例如
  • 如果没有明确设置一个巨大的常量值,是否可以期望被告知不要超时?

    我已将超时设置为一个愚蠢的高数字 有没有更好的方法告诉脚本不要超时 usr bin expect spawn telnet 10 10 10 10 set timeout 200000000 expect login send user r
  • 正则表达式在 Expect 缓冲区中查找字符串

    我正在尝试找到一个可匹配转义字符字符串的正则表达式 Expect 响应 请参阅这个问题 和一个六位数字 第一个字符为字母数字 这是我需要识别的整个字符串 r n u001b 1 14HX76196 最终我需要提取字符串 X76196 这是我
  • 我可以使用heredoc在bash中输入密码吗?

    我了解 RSA 身份验证 但出于我的目的 我想使用heredoc 来指定密码 我想要类似下面的东西 但我无法让它工作 这可能吗 bin bash echo n Enter Password read s password ssh myhos
  • 将 bash 数组传递给 Expect 脚本

    我有一个 bash 脚本 它像这样调用 Expect 脚本 SCRIPTS DIRECTORY my expect script sh my bash array 看起来我可以传递一个变量并使用它 对于这个例子 变量似乎是在 lindex
  • 如何在“expect script”中启动shell脚本?

    在这个expect脚本中 不会连接ssh服务器 我只想在本地执行一个 sh 文件 这可能吗 例如 bin expect command xxx sh a command which starts a certain shell script
  • bash/expect 脚本中的错误处理

    下面粘贴的是一个 bash 脚本 结合了 Expect 代码 其中 通过 ssh 连接到远程主机 收集文件并准备 tgz 文件 将 tgz 文件从远程主机复制到本地计算机 再次通过 ssh 连接到远程主机并删除之前创建的 tgz 文件 最后
  • 在 python 中执行 bash 脚本

    我创建了一个 Expect 脚本 执行时 它会通过 ssh 连接到服务器并执行一系列命令 伪代码如下所示 usr bin expect spawn ssh usr myip expect password send mypassword n
  • 循环提示输入另一个密码时出现问题

    我需要一些关于 EXPECT 脚本的帮助 我正在尝试在访问大量主机之前自动登录 并在用户错误输入密码时进行处理 我首先获取用户名和密码 然后针对特定主机对其进行验证 如果密码无效 我想循环并再次询问用户名和密码 我正在尝试这个 省略前面几行
  • 如何在 shell 脚本中通过命令行传递 Expect 中的参数

    我通过 shell 脚本中的命令行在 Expect 中传递参数 我试过这个 usr bin expect f set arg1 lindex argv 0 spawn lockdis p expect password send arg1
  • shell脚本中的top命令

    我正在尝试通过 Expect 脚本获取 top 命令的前 5 行 我从 shell 脚本中调用这个期望脚本以及其他一些东西 top head 5给我以下输出 即没有 cpu 统计信息 顶部 09 10 58 向上 46 天 17 03 12
  • 期望:将生成命令的输出存储到变量中

    在我的 预期 脚本中 set REPOS path to repo set REV 73 set LOG spawn svnlook log r REV REPOS 这将在变量 LOG 中存储什么 16345 内存位置 它应该在变量 LOG
  • 期望在 while 循环内 - 永远循环

    我是新来的脚本 所以请原谅我的绊脚石 以下是我的预期脚本的主要内容 目的是滚动浏览多个输出屏幕 在每个屏幕之后都会提示用户 继续 y n 最后 当没有更多屏幕时 会显示 提示符 这应该导致执行脱离 while 循环 set more scr
  • 使用expect进行无人值守(无提示)Homebrew安装

    根据Homebrew安装说明 可以使用以下命令进行安装 ruby e curl fsSL https raw github com Homebrew homebrew go install 这可行 但需要用户输入两次 确认安装并在脚本调用的
  • Expect 脚本中 sudo 的问题

    我正在运行以下脚本 usr bin expect f set user lindex argv 0 set pass lindex argv 1 set PATH lindex argv 2 set INV PATH lindex argv
  • 在 bash 中使用 ssh 内的 Expect 执行 sudo

    我想创建一个脚本来自动在多个 Linux 主机上进行安装 我使用 ssh 密钥登录到主机 在登录中我想做一个 sudo 我正在尝试使用 Expect 我在站上有它 但是我的服务器上没有运行脚本 我该怎么做 这是我的尝试 但没有运气 bin

随机推荐

  • 使用 Gradle 添加到 WAR 包中的错误文件

    我正在使用 Gradle 1 5 并且我正在尝试适应战争插件 http www gradle org docs current userguide war plugin html到 Eclipse 动态项目 当 WAR 被 eclipse
  • 禁用该复选框时不应进行更新

    我有两页 一页是管理员 另一页是教师 管理员将科目分配给教师 教师只想选择所需的时间 我的问题是我不想对禁用的复选框执行更新查询 我已经尝试了下面的代码 但它也在更新禁用复选框 using SqlConnection con2 new Sq
  • 当 A-lx 是奇异且无解时的特征向量

    R 如何找到以下矩阵的特征向量 特征值是 2 2 所以特征向量需要求解solve matrix c 0 1 0 0 2 2 这是无解的奇异矩阵 gt eigen matrix c 2 1 0 2 2 2 values 1 2 2 vecto
  • 了解elasticsearch jvm堆的使用情况

    Folks 我正在尝试减少 Elasticsearch 部署 单节点集群 中的内存使用量 我可以看到正在使用 3GB JVM 堆空间 为了优化 我首先需要了解瓶颈 我对 JVM 使用如何分配的了解有限 字段数据看起来消耗 1 5GB 过滤器
  • 如何使用 PhpStorm 和 Xdebug 调试 AJAX (POST)?

    我已将 PhpStorm 配置为调试 HTTP GET 但仅当我直接加载页面时 当我想要调试 AJAX 时 我获取 JS 请求的 URL 并创建一个 PhpStorm 配置来调试它 不是特别优雅 是吗 当然 我不能对 POST 请求这样做
  • 什么是投影?

    从数据库理论和 NHibernate 的角度来看 使用 SetProjection 时什么是投影 投影是关系代数的基本运算之一 它采用一个关系和该关系的属性列表 可能为空 作为输入 它输出仅包含指定属性列表的关系删除重复的元组 换句话说 输
  • 多个事实的聚合解决方案

    尝试创建一个谓词 timePeriod 2 计算特定事实的两个日期之间的时间段 我已经设法自己做到这一点 但当 其他答案 存在于同一列表中时会遇到问题 即更容易用示例解释 我有以下知识基础事实 popStar Jackson 1987 19
  • 以 HTML 代码作为输入的 Angular 组件

    我正在创建一个角度组件 它显示突出显示的 HTML 代码及其执行结果 显示的 HTML 代码位于 pre html 元素内 至于结果的预览 它是硬编码的 pre class prettyprint lang html lt button t
  • 带 Join 的 TSQL Update 语句

    我有两个具有父 子关系的表 我想用孩子的数据更新父母 但是 假设有 2 个孩子 我希望能够根据孩子的其他列来选择哪个孩子用于更新 这是我到目前为止所拥有的 父级 test 孩子 exdat 预期结果 更新后父级的结果应仅包含大写字母 我想用
  • 如何在一页中执行多个查询?

    我编写了这段代码 但是当我运行它时没有输出 没有错误但是问题没有输出 如何在同一页面中执行多个查询
  • ConstraintLayout 问题 - ImageView 16:9 上边距不合适

    我想使用 ConstraintLayout 构建以下布局 我使用这个源进行布局
  • Python记录器不尊重setLevel?

    我花了一些时间浏览网站上的 Python 记录器问题 希望我的问题能在那里得到解决 我已经设置了一个带有两个流处理程序的记录器 它们具有不同的格式和日志记录级别 这是我的代码库中的功能片段 import os import time imp
  • 如何从选定的文本中获取相邻字符?

    我有一个像这样的字符串 var comment this is a test Assume this i已选择 现在我需要null 左侧 和s 右边 我怎样才能得到它们 我可以像这样获取选定的文本 function getSelection
  • Shapeless 不适用于一般环境

    我仍在尝试了解 Shapeless 以及较小程度上的 Scala 并且我一直在编写一些简单的代码来为案例类生成随机实例数据 主要基于此处的指南 http enear github io 2016 09 27 bits of shapeles
  • 在没有窗口引用的选项卡 dom 之间进行通信[重复]

    这个问题在这里已经有答案了 我使用以下命令打开包含一些页面内容的新选项卡 在新进程中 var p document getElementById myElement var a document createElement a a setA
  • 如何使用 knit/Sweave 中 R 变量的值在 LaTeX 中编写 if-then 语句

    我目前正在使用 knitr 以及 R 3 0 2 和 RStudio 来生成 LaTeX 报告 我的报告被输入为 Rnw 文件 并使用 knit2pdf 函数进行编译 我想用一个LaTeX 中的 if then 公式 http en wik
  • 视图模型的单独项目以“实施”MVVM:如何打开对话框?

    在遵守 MVVM 模式的同时打开对话框似乎是常见问题之一 此处和其他地方 我知道有像 MVVM light 这样的框架可以解决这个问题 但我目前正在开发一个非常小的个人项目 出于学习目的 我尝试自己完成大部分工作 为了 强迫 自己注意引用
  • 如何在 Swift 3 中使用 Facebook API 访问个人资料图片?

    早些时候我尝试像这样访问 let gr2 FBSDKGraphRequest FBSDKGraphRequest graphPath me parameters fields id picture width 198 height 198
  • 围绕文本创建表格

    我有一个单词列表 每个单词都独占一行 这是表格的第一列 我想手动创建第二列 我现在想使用一些插件 它将在文本周围创建一个 ASCII 表 因此我有很好的格式 每列中的起始字母应该在一个 垂直线 中 或者我应该能够快速移动到通过一个快捷方式正
  • 期望 ssh 脚本返回无效命令名

    我正在尝试编写一个 Expect 脚本 该脚本将 ssh 进入服务器 发送 sudo su 然后检查 iptables 状态并将输出放入服务器上的日志文件中 下面是脚本 1 usr bin expect 2 exp internal 1 3