Shell脚本交互之:自动输入密码

2023-11-14

平时在控制台输入指令如:sudo、ssh、ftp或者修改admin权限的文件时候都会要求输入password,但是在she'll脚本运行过程中该如何交互实现自动输入密码呢?

下面总结三种实现方法。

一、重定向:用重定向方法实现交互的前提是指令需要有参数来指定密码输入方式,如ftp就有-i参数来指定使用标准输入来输入密码

        shell用重定向作为标准输入的用法是:cmd<<delimiter ,shell 会将分界符delimiter之后直到下一个同样的分界符之前的内容作为输入

  实现ftp自动登录并运行ls指令的用法如下:其中zjk为用户名,zjk123为密码        

ftp -i -n 192.168.21.46 <<EOF
user zjk zjk123
ls
EOF

二:管道:跟重定向一样,指令同样要有参数来指定密码输入方式,如sudo的-S参数,passwd的-stdin参数

       所以实现sudo自动输入密码的脚本如下:其中zjk123为密码

      echo 'zjk123' | sudo -S cp file1 /etc/hosts
      实现自动修改密码的脚本写法如下:

      echo 'password' | passwd -stdin username

三:expect:上面介绍的两种方法前提条件是指令有参数来设定密码输入方式,像ssh指令就没有这样的参数,第三种交互方式就派上用场了

       expect就是用来做交互用的,基本任何交互登录的场合都能使用,但是需要安装expect包

      语法如下:

#!/bin/expect
set timeout 30
spawn ssh -l jikuan.zjk 10.125.25.189
expect "password:"
send "zjk123\r"
interact
注意:expect跟bash类似,使用时要先登录到expect,所以首行要指定使用expect

在运行脚本时候要expect  file,不能sh file了

上面语句第一句是设定超时时间为30s,spawn是expect的语句,执行命令前都要加这句

expect "password:"这句意思是交互获取是否返回password:关键字,因为在执行ssh时会返回输入password的提示:jikuan.zjk@10.125.25.189's password:

send就是将密码zjk123发送过去

interact代表执行完留在远程控制台,不加这句执行完后返回本地控制台 
      








本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell脚本交互之:自动输入密码 的相关文章

  • Linux I2C设备驱动基本规范

    不同于单片机驱动开发 即使是简单的I2C设备驱动程序 如果要在Linux上实现同种功能的驱动程序 事情也会变的复杂起来 对于初学者而言 主要的困难就是不知道如何使用Linux现有的驱动框架 去完成驱动程序的开发 I2C设备驱动 相对来说比较
  • Shell脚本交互之:自动输入密码

    平时在控制台输入指令如 sudo ssh ftp或者修改admin权限的文件时候都会要求输入password 但是在she ll脚本运行过程中该如何交互实现自动输入密码呢 下面总结三种实现方法 一 重定向 用重定向方法实现交互的前提是指令需
  • ARM运行可执行文件出现/usr/lib/libstdc++.so.6: version `CXXABI_ARM_1.3.3' not found解决

    1 关于Linux PC上出现这种问题容易解决 直接下载个高版本的libstdc so 6 0 x复制到 usr lib中 软连接一下就好了 ln s libstdc so 6 0 x libstdc so 6 2 但是在ARM板上执行可执
  • Expect:从输出中提取特定字符串

    我正在远程计算机上使用 bash 脚本中的 Expect 来导航基于 Java 的 CLI 菜单 并且尝试在不离开 Expect 会话的情况下从输出中提取某些内容 我的脚本中的 Expect 命令是 expect c spawn ssh u
  • Expect - 根据行和列从屏幕区域获取变量

    我正在使用 Expect 与 SSH 会话和 ERP 程序自动交互 不是依赖正则表达式来捕获我的预期脚本中的变量 是否可以在收到用户的特定击键后将屏幕区域 例如一个字段 捕获到代码中的变量中 向服务器发送一些其他命令并重新发送该字段 假设订
  • 预期:没有这样的变量[关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我开始使用expect 我有一个简单的脚本 但我有一个问题 我想初始化一个第一个字符为 的变量 set mystring THIS IS MY STRING 所以我得到一个错误 因为exp
  • 在expect中使用argc和argv解析命令行

    我有一个期望例程 它需要生成一个进程并将我传递给期望例程的命令行参数传递给生成的进程 我的期望例程有以下几行 spawn myProcess argv 当我调用我的期望例程时 我从命令行调用它 如下所示 expect myRoutine
  • 如何从期望脚本中转义异常/唯一字符?

    在期望脚本中 我可以设置任何命令或字符以在远程计算机上运行它 但可悲的是 expect 无法发送与expect 脚本中定义的相同的字符 例如 我想从expect脚本运行这一行 以便更改IP地址10 10 10 10 to 1 1 1 1 e
  • Shell脚本telnet登录成功,之后如何发出命令?

    usr bin expect f spawn telnet 10 21 0 17 expect re login send admin n expect re Password send supersecurepassword n inte
  • bash/expect 脚本中的错误处理

    下面粘贴的是一个 bash 脚本 结合了 Expect 代码 其中 通过 ssh 连接到远程主机 收集文件并准备 tgz 文件 将 tgz 文件从远程主机复制到本地计算机 再次通过 ssh 连接到远程主机并删除之前创建的 tgz 文件 最后
  • 如何使用带有可选提示的expect?

    假设我正在尝试为具有三个提示的 test sh 编写一个 Expect 脚本 prompt1 prompt2 prompt3 我的代码是这样的 spawn test sh expect prompt1 send pass1 expect p
  • 循环提示输入另一个密码时出现问题

    我需要一些关于 EXPECT 脚本的帮助 我正在尝试在访问大量主机之前自动登录 并在用户错误输入密码时进行处理 我首先获取用户名和密码 然后针对特定主机对其进行验证 如果密码无效 我想循环并再次询问用户名和密码 我正在尝试这个 省略前面几行
  • 期望脚本在单独调用时有效,但不能作为盐状态

    我正在尝试通过expect 进行scp 和ssh 操作 如果我直接从终端调用下面的脚本 则它可以工作 usr bin expect myexpect sh但是当我使用 salt 运行它时 第一个 scp 命令在第二个 ssh 失败的地方起作
  • 在“expect”中使用条件语句

    我需要使用自动登录到 TELNET 会话expect 但我需要处理同一用户名的多个密码 这是我需要创建的流程 打开与 IP 的 TELNET 会话 发送用户名 发送密码 密码错误 再次发送相同的用户名 然后发送不同的密码 此时应该已经成功登
  • 使用expect进行无人值守(无提示)Homebrew安装

    根据Homebrew安装说明 可以使用以下命令进行安装 ruby e curl fsSL https raw github com Homebrew homebrew go install 这可行 但需要用户输入两次 确认安装并在脚本调用的
  • Windows 上的 unbuffer 程序相当于什么?

    你好根据这个帖子 https unix stackexchange com a 25375 unbuffer通过伪终端 pty 连接到命令 这使得系统将其视为交互式进程 因此不使用任何 stdout 缓冲 我想在 Windows 上使用这个
  • 如何在 {expect} 脚本中创建“循环”语句?

    假设是 这是脚本 usr bin expect set a test 我想在这个脚本中创建一个循环 以便它可以打印值 a 前面有一个基于循环的数字 所以如果我想让它循环3次 最终产品将变成 1 test 2 test 3 test 您可以使
  • 如何在 Perl 脚本中加密或隐藏密码?

    我正在研究 Perl 脚本 它使用Expect http search cpan org dist Expect通过 telnet 登录到远程计算机 不要问 必须使用 telnet 我还根据需要执行 perforce p4 登录操作 并使用
  • 期待、互动,然后再次期待

    有几篇关于相同内容的帖子 但我仍然无法使我的期望脚本正常工作 我的目的是自动化一切 但保留用户输入的密码 所以脚本有 3 个部分 自动登录 给予用户交互以输入密码 将控制权交还给 Expect 脚本以继续工作 所以我有一个将生成的脚本 其中
  • 带 Expect 的 Telnet 自动化:身份验证速度慢?

    我正在使用 Telnet 向 Mikrotik 路由器发送命令 telnet 192 168 100 100 l admin Password pass1234 admin ZYMMA gt interface pppoe server r

随机推荐

  • C#简单练习一

    namespace Demo练习 internal class Program static void Main string args 输入a b两个整数 编程求出a除以b得到的商和余数 输入 两行 只有两个整数 输出 输出只有一行 两个
  • 使用GPU训练(PyTorch demo)

    cuda 对网络模型 数据 损失函数这三种变量调用 cuda 来在GPU上进行训练 将网络模型在gpu上训练 model Model model model cuda 损失函数在gpu上训练 loss fn nn CrossEntropyL
  • PCL调错:合集

    1 error C4996 pcl visualization PointCloudColorHandler
  • QT-线程池

    在程序逻辑中经常会碰到需要处理大批量任务的情况 比如密集的网络请求 或者日志分析等等 一般会创建一个队列 用一个或者多个线程去消费这个队列 一般也要处理队列的加锁和解锁的问题 除非在设计时就能够做到专列专用 否则锁是不可避免的 而且在入队和
  • Kubernetes v1.26 配置默认存储 StorageClass

    Kubernetes v1 25 引入了一个 Alpha 特性来更改默认 StorageClass 被分配到 PersistentVolumeClaim PVC 的方式 启用此特性后 你不再需要先创建默认 StorageClass 再创建
  • vue所有UI库通用)tree-select 下拉多选(设置 maxTagPlaceholder 隐藏 tag 时显示的内容,支持鼠标悬浮展示更多

    如果可以实现记得点赞分享 谢谢老铁 1 需求描述 引用的下拉树形结构支持多选 限制选中tag的个数 且超过制定个数 鼠标悬浮展示更多已选中 2 先看下效果图 3 实现思路 首先根据API文档 先设置maxTagCount 最多显示多少个 t
  • networkx创建带权有向图,访问每个点的邻居节点(neighbor)和边权(weight)

    import networkx as nx G nx DiGraph 创建有向图 G add edge 1 2 weight 1 添加 带权边 weight表示边权 G add edge 1 3 weight 1 G add edge 3
  • eureka缓存

    AP系统 服务端 三级缓存 缓存 说明 一级 本地缓存 实时更新 客户端注册时数据保存到这 二级 读写缓存 实时更新 客户端注册 下线 故障时缓存失效 读取读写缓存找不到数据时 去一级缓存读取并保存到二级缓存 三级 读缓存 周期更新 默认3
  • watch的使用方法

    watch简单监听属性 监听对象就不要用这种写法 data return num 1 watch num newval oldval newval 是新值 oldval 是修改前的值 num有变化之后所执行的代码块 console log
  • 学习总结Q

    学习总结 学习内容 Java HashSet 学习产出 HashSet 基于 HashMap 来实现的 是一个不允许有重复元素的集合 HashSet 允许有 null 值 HashSet 是无序的 即不会记录插入的顺序 HashSet 不是
  • MySQL 的CASE WHEN 语句使用说明

    介绍mysql数据库中case when语句的用法 首先介绍case when语句的基础知识 然后提供了相关例子 1 mysql数据库中CASE WHEN语句 case when语句 用于计算条件列表并返回多个可能结果表达式之一 CASE
  • 【C++11智能指针】shared_ptr的初始化、拷贝构造和拷贝赋值、移动构造和移动赋值

    文章目录 1 智能指针概述 2 shared ptr的初始化 2 1 shared ptr和new结合使用 直接初始化 2 2 make shared函数 3 shared ptr的拷贝构造和拷贝赋值 4 shared ptr的移动构造和移
  • 函数名称前面加引用“&”或指针符号“*”的意思

    学习笔记 一 函数名称前面加引用符号 代表该函数返回值类型是引用 如 int operate 二 函数名称前面加指针符号 代表它是函数指针 函数指针是一个指向函数的指针 函数指针表示一个函数的入口地址 使用函数指针的好处就是在处理 在运行时
  • 解析敏捷开发流程之Scrum:3个角色、5个会议、12原则

    本文主要从Scrum的定义和目的 敏捷宣言 Scrum中的人员角色 Scrum开发流程 敏捷的12原则等几方面帮助大家理解Scrum敏捷开发的全过程 一 Scrum的定义和目的 Scrum是一个用于开发和维护复杂产品的框架 是一个增量的 迭
  • MySql在Windows下查看日志

    大体记录mysql查看日志的方法 并不具体 1 查看是否开启了日志 show variables like log bin value是ON表示已开启 如果没开启执行第二步 2 开启日志 在mysql的配置文件mysql ini中的 mys
  • react 开发环境下 解决 Uncaught ReferenceError: process is not defined 异常:

    react 开发环境下 解决 Uncaught ReferenceError process is not defined 异常 package json中添加 resolutions react error overlay 6 0 9 锁
  • 什么是AQS?

    AQS AbstractQueuedSynchronizer 是 Java 中用于构建同步器的抽象基类 它提供了一种强大的框架 使得可以相对容易地构建各种同步工具 如锁 信号量 倒计数器等 AQS 是 Java 并发包中的核心组件之一 它在
  • JAVA--Map集合详解

    特点 该集合存储键 key 值 value 对 一对一对往里存 而且要保证键 key 的唯一性 Map集合和Set集合很像 其实Set集合底层就是使用了Map集合 什么时候使用Map集合 当数据之间存在映射关系时 优先考虑Map集合 Map
  • MySQL的基础部分(基础部分完结)

    MySQL的基础部分 基础部分完结 文章目录 MySQL的基础部分 基础部分完结 知识小回顾 小案例部分 分页查询 总结多子句查询 多表查询 重点 难点 自连接 多行子查询 小结 子查询临时表 any all关键字的使用 mysql多列子查
  • Shell脚本交互之:自动输入密码

    平时在控制台输入指令如 sudo ssh ftp或者修改admin权限的文件时候都会要求输入password 但是在she ll脚本运行过程中该如何交互实现自动输入密码呢 下面总结三种实现方法 一 重定向 用重定向方法实现交互的前提是指令需