代码编织梦想

参数说明:

  • set:可以设置超时,也可以设置变量
  • timeout:expect超时等待时间,默认10S
  • spawn:执行一个命令
  • expect “”:匹配输出的内容
  • exp_continue:继续执行下面匹配
  • \r:可以理解为回车
  • $argc:统计位置参数数量
  • [lindex argv0]:脚本后第一个参数,类似于shell中argv0]:脚本后第一个参数,类似于shell中1,以此类推
  • puts:打印字符串,类似于echo
  • awk -v I="$ip":赋值变量
  • expect{…}:输入多行记录

其他参数说明:

  • timeout -1:永不超时退出
  • log_file /var/log/expect.log:记录交互信息,一般crontab时使用
  • interact:交互后不退出远程终端,如果加要把expect “root@*” {send “exit\r”}注释掉,如果不加,就直接退出
  • 将spawn ssh root@$ip换成spawn ssh -o StrictHostKeyChecking=no root@ip既不会再提示是否将服务器计算机密钥加入本地known_hosts

示例:

shell内嵌类型:

#!/bin/bash
/usr/bin/expect << EOF
spawn /bin/su -
expect "Password: "
send "123\r"
expect "*#"
interact
expect eof
EOF

分离型:

login.exp文件内容
#!/usr/bin/expect 
set ipaddress [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]

if { $argc != 3 } {
puts "Usage: expect login.exp ipaddress username password"
exit 1
}

set timeout 30
spawn ssh $username@$ipaddress
expect {
        "(yes/no)" {send "yes\r"; exp_continue}
        "password:" {send "$password\r"}
}

expect "$username@*"  {send "df -h\r"}
expect "$username@*"  {send "exit\r"}
expect eof
user_info文件内容
192.168.1.156   user    user
192.168.1.154   root    123.com

expect.sh文件内容

#!/bin/bash
for ip in `awk '{print $1}' user_info`
do
    user=`awk -v I="$ip" '{if(I==$1)print $2}' user_info`
    pass=`awk -v I="$ip" '{if(I==$1)print $3}' user_info`
    expect login.exp $ip $user $pass
done

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/HandsomeHong/article/details/111060525

Linux安全基线Centos7-爱代码爱编程

安全基线检查 扫描用户和时间: user_id=whoami echo “当前扫描用户:${user_id}” scanner_time=date '+%Y-%m-%d %H:%M:%S' echo “当前扫描时间:${scanner_time}” echo “***************************” echo “账号策略检查中…” ec

Centos7部署ELK-爱代码爱编程

Centos7部署ELK7.8.0 ###下载7.8.0 https://mirrors.huaweicloud.com/filebeat/7.8.0/filebeat-7.8.0-linux-x86_64.tar.gz https://mirrors.huaweicloud.com/logstash/7.8.0/logstash-7

vmware流程以及修改默认语言-爱代码爱编程

安装vmware的流程 以及修改默认语言 1.下载vware的安装包 选择一个下载源,这里提供一个西西园的地址https://www.cr173.com/soft/68480.html 2.安装vmware 下载后选择安装到某个磁盘文件夹 到这一步安装出现的问题几乎没有,安装镜像的时候会出现问题,稍后再说 3.下载想要安装的系统的ios镜像

盘点腾讯后台开发各级工程师(T1-T9)需要具备哪些能力-爱代码爱编程

作为一个程序员,不管是初入职场的菜鸟还是做开发多年的老鸟,都希望有机会能进大厂,最近有不少小伙伴问腾讯好不好进?需要的技术栈是怎么样的?本文就给大家普及一下腾讯后台开发各级工程师(T1-T9)需要具备哪些能力 ? 下图是腾讯后台开发技术栈总览,不同级别所需要具备的能力要求不一样,只有最高级的T9才是所有能力都需要具备的。 下面就详细介绍各职级需要具备的能力

【爱找茬】linux系统和windows系统,你找到了几处不同?-爱代码爱编程

什么是linux系统   Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。   Linux操作系统诞生于

KVM [ 3 ] --- KVM虚拟机管理:virsh命令,kvm虚拟机添加内存,添加硬盘-爱代码爱编程

文章目录 创建 kvm 的虚拟机流程KVM虚拟机管理一、virsh 管理虚拟机1 列出正则运行中的虚拟机2 列出所有的虚拟机3 查看指定虚拟机的元数据信息4 查看指定虚拟机的 IP 地址5 启动虚拟机6 正常关闭虚拟机7 强制关闭虚拟机,相当于拔掉电源8 重启虚拟机9 从一个 xml 文件定义一个虚拟机10 取消定义一个虚拟机二、给kvm虚拟机添加

如何集中化管理ssh的密钥-爱代码爱编程

开发人员经常需要访问某些服务器,做一些检查应用程序日志之类的工作。 一般来说,访问过程是使用公私钥加密来控制的,每位开发人员都会生成自己的公私钥对。并且,每个开发人员的公钥都会添加到他们有权访问的每台服务器上的 authorized_keys 文件中。 文章目录 1. 痛苦的手动更改2. 替代解决方案2.1 解决方案:签名密钥2.2

Ubuntu下SSH无法连接root账户-爱代码爱编程

  以前遇到过这个问题,还是说一下,给新学的一个指引。   环境:Ubuntu20.10   1.对于初学者来说,ssh连接不上,考虑是不是Ubuntu是不是没有安装ssh,查看一下ssh是否安装。 ssh -V 如果没有版本信息,则是ssh没有安装,安装ssh apt install ssh 2.安装ssh后,一般来说,客户端ssh就能连上服

记一次ssh连接失败的问题-爱代码爱编程

前言 最近在做ci和cd,cd的时候使用ssh连接到服务器的时候,出现问题ssh read: Connection reset by peer,这是咋回事前几分钟都是ok的,之后就出现这样的问题了 解题思路 检查服务器是否能ping通ping 192.186.2.33 ping是通的,因为ping是底3层网络协议,这只能证明底3层网络协议是ok的

阿里云ECS服务器使用密钥对无密码登入-爱代码爱编程

1. 首先自己的电脑运行如下命令 ssh-keygen -t rsa //一直回车即可 执行完成后笔记本这个C:\Users\你的用户名\.ssh目录会生成一个密钥:id_rsa 与 公钥:id_rsa.pub 两个文件 2. 阿里云ECS控制台添加密钥对 阿里云ECS → 网络和安全 → 密钥对 填写 公钥:id_rsa.pub 文件内的内

树莓派的frp开机自动启动-爱代码爱编程

树莓派的frp开机自动 方法之一:使用systemctl控制开机自动启动,这个方法比较方便好用。 增加两个文件,frps.service和frpc.service,并在开机时自动运行。 1、 #sudo nano /lib/systemd/system/frps.service 在frps.service里写入以下内容: (代码/var/frp/是frp

terminal采用公钥免密访问服务器-爱代码爱编程

在使用ssh远程访问服务器一般都要输入密码,这次将此主机生成的公钥放入到服务器上,即可直接登录,无需输入密码,我这里是指使用terminal或者cmd等终端进行ssh登陆,并不是使用xshell6的登陆 参考连接 【GIT】git连接通过ssh连接githubWindowsTerminal内添加阿里云服务器(SSH) 本机(win系统) 本机生成r