expect实现自动交互免密登录操作

ssh实现批量免密登录 使用场景 比如我们在使用ansible批量部署大量服务器的时候,如果一台一台的服务器去分发密钥会很麻烦 所以用脚本实现批量部署免密登录就很现实了。下面的代码亲测成功 #!/bin/bash rpm -q expect if [ $? -eq 0 ]; then echo "已安装" else yum -y install expect if [ $?... 阅读详情

1、下载expect
2、expect内部指令

spawn   shell 命令程序 
expect   "捕获到shell 命令程序执行之后输出的字符串"  
send  "发送给 shell 命令程序的字符串"

3、在命令行直接输入 expect 可以进入 expect 程序的解释器终端

[root@mike~]# expect
expect1.1> spawn echo "hello"   # 发送一条 shell 命令, 这里是指 echo "hello"
spawn echo hello
1490
expect1.2> expect "hello"     # 捕获这个字符串,只要包含这个字符串就可以
hello
expect1.3> send "yes\n"      # 发送一个字符串
expect1.4> expect off           # 结束这次捕获
yes
expect1.5>

在脚本中的使用操作

# 开始 expect  解释器程序
/usr/bin/expect<<EOF

# 设置捕获字符串后,期待回复的超时时间
set timeout 30

spawn   ssh-keygen

# 开始进连续捕获
expect     {
        ".ssh/id_rsa)"       { send    "\n";  exp_continue }
        "Overwrite (y/n)?"   { send    "y\n"; exp_continue }
        "no passphrase):"    { send    "\n";  exp_continue }
        "again:"             { send    "\n";  exp_continue }
}

# 结束 expect 解释器程序
EOF

“.ssh/id_rsa)” { send “\n”; exp_continue }
意思是 捕获到字符串 “.ssh/id_rsa)” 后 发送字符串 “\n” 就是相当于按下回车键
exp_continue 意思是继续进行捕获,不退出 expect 程序。“\n”代表回车的意思

实战案例

# 写个用于自动生成密钥对的函数
auto_keygen (){
    /usr/bin/expect<<EOF

    set timeout 30

    spawn   ssh-keygen

    expect     {

        ".ssh/id_rsa)"       { send    "\n";  exp_continue }
        "Overwrite (y/n)?"   { send    "y\n"; exp_continue }
        "no passphrase):"    { send    "\n";  exp_continue }
        "again:"             { send    "\n";  exp_continue }
    }

EOF
}

# 写个自动免密登录的函数
send_key () {
pwd=upsa
/usr/bin/expect <<EOF
set timeout 30

# 发送公钥给对方服务器
spawn ssh-copy-id root@$1
expect {
"yes/no" { send "yes\n"; exp_continue }
"password:" { send "${pwd}\n"} }
expect eof
EOF
}

# 定义一个变量,其值是当前用户的公钥文件
pub_key_file=$HOME/.ssh/id_rsa.pub

# 假如公钥文件不存在,说明需要创建密钥对
if [ ! -f ${pub_key_file} ];then
    auto_keygen
fi

# 循环一个存放 ip 地址的文件,并且把每个 IP地址传递给 函数
for ip in $(cat ./ips.txt)
do
   send_key $ip
done
Linux运维:Shell脚本实现ssh免密登录远程服务器 LInux系统日常运维过程中,经常需要在本地运行脚本执行对远程主机的命令,正常情况下,ssh登录远程服务器时会提示输入密码,这会影响到脚本的自动执行(因为shell脚本中没有自动填充密码的命令)。有三个解决办法: 1)使用远程登录工具 2)建立主机间的ssh信任依赖关系 3)用脚本模拟scp命令的密码输入过程,避免每次手工输密码。 一、使用远程登录工具—实现ssh免密登录远程服务器 常用的远程登录工具有expect以及sshpass,本文主要介绍的是sshpass。 1)sshpass介绍 ssh登录.. 阅读详情

相关推荐

expect配置单向ssh免密码登录

expect配置单向ssh免密码登录

免交互语法expect

是建立在tcl(tool command language)语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互的相关问题。expect不是系统自带的,所以得用yum先下载。

weixin_72625764的博客 157

complier lab2

只需支持定义 main 函数即可不带参数 int main(){...}带参数 int main(int argc, int argv){...}

qq_43581843的博客 906

expect免输密码登录服务器

1. 首选是往authorized_keys里追加公钥来实现 2. 第二种选择是使用expect来自动填充密码 3. 第三种是使用echo打印密码,然后自动手动复制粘贴 ## 二、 1)安装expect sudo apt install expect # Ubuntu/Debian sudo yum install expect # Centos/RedHat 2)创建.exp文件:vi .ssh_server.exp #!/usr/bin/expect -f set user [ li

jaket5219999的博客 1120

水下探测小白必看:单波束vs多波束声呐,5分钟搞懂核心区别

本文为水下探测新手清晰解析了单波束与多波束声呐的核心区别。单波束声呐如同精准的“手电筒”,进行逐点扫描,适用于定点测深和目标探测;而多波束声呐则像“聚光灯”,能一次性覆盖一个扇区,高效获取海底地形三维信息,是海底测绘和水下三维建模的理想选择。文章通过生动的比喻和对比表格,帮助读者快速理解两者原理、效率差异及适用场景。

linux6sysadmin的博客 1048

RK3588-NANOPC-T6移植ubuntu+xenomai内核

更具网址下载相应的内核。导入到开发板并执行内核。

qq_42007446的博客 573

使用expect脚本实现远程免密传输以及登录后进到指定目录

使用expect脚本实现远程免密传输以及登录后进到指定目录。

又菜又爱玩的博客 675

手把手教你学Simulink--基于微电网的建模与仿真场景实例:独立运行模式下微电网的能量管理系统设计

本文详细介绍了使用Simulink对独立运行微电网能量管理系统进行建模与仿真的完整流程。主要包括:系统结构设计(分布式能源、储能系统、负荷等模块)、建模步骤(从创建项目到实现能量管理策略)、仿真设置与结果分析。通过建立基于规则的控制逻辑和优化调度算法,实现微电网的自主运行和能量优化管理。文章还提供了参数优化和多目标改进建议,为新能源和智能电网领域的研究与应用提供了实用指导。

MHD0815的博客 8583

shell脚本通过expect实现自动单边无密登录

最近项目需要实现单边无密登录,去网上搜索了下相关文章,实践之后发现几乎都不能用。于是结合expect的使用方法自行写了一个,通过验证可用。现在总结在这供需要的朋友参考。代码如下:EXPECT=/usr/bin/expect $EXPECT &lt;&lt;EOF spawn ssh-keygen -t rsa expect "*ssh/id_rsa*" { send -- "\r" ...

塔尖草的博客 780

【C语言】程序员筑基功法——《函数栈帧的创建与销毁》

汇编角度带你走进函数栈帧

StackFrame 3660

N32G430学习笔记11- systick使用函数-延时函数

N32学习笔记11- systick使用函数-延时回调函数-延时函数

Car12 1416

expect免密登录

expect无交互式登录 #安装 yum install expect -y 1)定义脚本执行的shell #!/usr/bin/expect 这里定义的是expect可执行文件的链接路径(或真实路径),功能类似于bash等shell功能 2)set timeout 30 设置超时时间,单位是秒,如果设为timeout -1 意为永不超时 3)spawn spawn 是进入expect环境后才能执...

peach588的博客 11万+

[Dify]-进阶5- 使用 Dify 构建多轮对话的客服机器人

本文介绍了如何利用Dify平台构建智能客服系统,重点阐述了ChatFlow框架的应用。系统支持多轮对话、业务接口集成和话术策略管理,具备订单查询、退货申请等核心功能。通过Classifier节点实现意图识别,借助Router节点分流处理流程,并结合API插件实现业务数据对接。文章还提供了部署调试、会话优化和监控分析的具体方法,强调模块化设计和插件化集成的重要性,为构建功能完善的智能客服系统提供了完整解决方案。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1660

Shell-expect实现自动交互免密登录操作

ssh sshd #首先需要安装expect yum -y install expect #语法结构 spawn shell 命令程序 expect “捕获到shell 命令程序执行之后输出的字符串” send “发送给 shell 命令程序的字符串” 示例: [root@e5ac44e88027 ~]# expect expect1.1> spawn echo "hello...

Forgetfanhua的博客 617

SAP Integration Suite 与 SAP Cloud Integration 的关系解析

SAP Cloud Integration是SAP Integration Suite套件的核心组件,专注于消息与流程集成。两者关系可概括为:Integration Suite是SAP BTP上的集成平台套件(iPaaS),而Cloud Integration是其中负责应用与B2B集成的关键能力。日常所说的"CPI"实际指代的是Integration Suite中的Cloud Integration功能。该套件还包含API管理、事件网格等其他集成能力,共同构成企业集成解决方案。理解这一层

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 594

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Linux 下 ssh 免密登录配置

利用shell脚本实现免密登录 shell中expect免交互 shell_expect实现自动交互免密登录操作 shell结合expect实现ssh批量免密登录 Shell脚本交互:自动输入密码

老实人张大傻 217

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

shell脚本登录sftp

sftp不能像ftp一样直接使用账号/密码登录(ftp ip地址; user 账户/密码),需要交互式输入登录密码。在shell中可以使用expect 传入密码。 sftp $rad.put $BSF_USER@$BSF_IP expect{ "password:" {send "$spwd\r"} "(yes/no)?" {send "yes\r";exp_continue} } 也可

HoldonWithYourGoal的博客 2万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

linux expect 自动交互脚本用法

检查是否安装tcl,expect 如果没有安装,使用yum安装: yum install -y tcl yum install -y expect expect参数 启用选项 -c:执行脚本前先执行的命令,可多次使用。 -d:debug模式,可以在运行时输出一些诊断信息,与在脚本开始处使用exp_internal 1相似。 -D:启用交换调式器,可设一整数参数。 -f:从文件读取命令,仅用于使...

hiekay的博客 1万+

shell脚本实现自动交互免密登录(基于expect)

Background 最近在给公司搭建大数据集群(Centos7),需要做免密登录,十几台机器,生成密钥后需拷贝到相应的机器,不用shell脚本操作太麻烦了,就研究了下怎么脚本拷贝密钥时自动输入yes和密码,操作记录如下: 1 下载expect yum -y install expect 2 expect基本指令介绍 spawn shell 执行shell命令程序 expect "捕获到shell 命令程序执行之后输出的字符串" send "发送给 shell 命令程序的字符串" 3 s

on the way . . . 1168

【Linux】命令expect使用详解

expect 是由Don Libes基于Tcl(Tool Command Language )语言开发的,是一种脚本语言,主要应用于自动化交互式操作的场景,借助Expect处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率。

康师傅没有眼泪 1万+

expect实现Shell自动化交互的方法

linux脚本中有很多场景是进行远程操作的,例如远程登录ssh、远程复制scp、文件传输sftp等。这些命令中都会涉及到安全密码的输入,正常使用命令时是需要人工手动输入密码并接受安全验证的。为了实现自动化远程操作,我们可以借用expect的功能。 expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。expect是不断发展的,随着时间的流逝,其功能越来越强大,已经...

weixin_44162346的博客 719

expect实现无交互登录

1.expect实现无交互登录 ​ expect是一个用来实现自动交互功能的软件套件。如果你想写一个能自动处理输入输出的脚本(如向用户提问并且验证密码),又不想面对C或者Perl,那么expect是你最好的选择。它可以用来做一些Linux下无法做到交互的一些命令操作。 1.1 expect软件的安装 [root@CentOS7 ~]# yum -y install expect 1.2 使用e...

weixin_43265596的博客 595

shell编程之expect

一、expect 一 expect介绍 expect是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。说白了expect就是一套用来实现自动交互功能的软件需要自行安装 yum install -y expect expect基础 在使用expect时,基本上都是和以下四个命令打交道: 命令 作用 spawn 启动新的进程 expect 从进程接收字符串 send 用于向进程发送字符串 interact 允许用户交互 spawn命令用来启动新的进程,spawn

givenchy_yzl的博客 1万+

Linux Expect使用案例:免密登录、MySql创建数据库

1.expect 简介 expect 是用来进行自动化控制和测试的工具。主要是和交互式软件telnet ftp passwd fsck rlogin ssh tip 等进行自动化的交互。对于大规模的linux 运维很有帮助。 2.expect 基本使用 send:向进程发送字符串,用于模拟用户的输入。注意一定要加\r回车 expect:从进程接收字符串 spawn:启动进程(由spawn启动的...

机器熊的技术大杂烩 1032

expect实现SSH首次登录的自动交互 及 ssh免密登陆

一-创建公私钥ssh-keygen# ls /root/.sshauthorized_keys  id_rsa  id_rsa.pub cat /root/.ssh/id_rsa.pub  &gt; /root/.ssh/authorized_keys二-Are you sure you want to continue connecting (yes/no)?避免提示输入yes/no修改vim ...

weixin_41749731的博客 1576

expect+shell脚本实现免密登录

文章目录1. expect2. 脚本编辑2.1 测试 简介: 此脚本需要用到expect和openssh的知识点。 关于openssh可见往期文章点此前往 1. expect 参数 解释 expect 自动应答命令(用于交互式命令的自动执行) set timeout 1 等待1秒再向下执行/-1为永不超时 set NAME [ lindex $argv 0 ] 定义变量 sapwn 监控程序 send 发送问题答案给交互命令 \r 在终端敲回车 exp_continu

满堂花醉三千客,一剑霜寒十四州 2409
上一篇: SSH和SSHD
下一篇: shell-sed流编辑器
Operations_white
博客等级 码龄7年 3粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值