linux系统shell语言的自动化交互

自动化交互

expect交互

yum -y install expect tcl tcl-devel      //安装expect交互工具

expect用法

用法: 
1)#!/usr/bin/expect  //定义脚本执行的shell
2)set timeout 30     //设置超时时间30s 
3)spawn              //传递交互命令
4)expect             //判断输出结果是否包含某项字符串,没有则立即返回
5)send               //执行交互动作		
6)interact           //执行完后保持交互状态,把控制权交给控制台 
7)exp_continue       //继续执行接下来的操作
vim expect.exp        //运行脚本使用命令:expect expect.exp
#!/usr/bin/expect    //定义脚本执行的shell

spawn ssh root@ip地址       //启动系统中需要交互的程序
			
expect 
{
	"yes/no" {send "yes\r"; exp_continue}    //send发送回答,\r代表回车  
										//exp_continue,在"yes/no"没出现时忽略这句话
	"passwd:" {send "密码\r"} 
}
	interact            //停留在当前程序位置
			
========================================================
bash调用expect语言
/usr/bin/expect <<-EOF
expect语言内容
expect eof             //运行结束后,离开当前程序位置,返回之前工作位置
EOF

sshpass

概念

实用程序旨在使用键盘交互密码身份验证模式运行SSH ,但以非交互方式运行。

SSH使用直接TTY访问来确保密码确实是由交互式键盘用户发出的。在专用的TTY中运行SSH

yum -y install sshpass     //安装sshpass

第一次使用ssh登录时需要输入yes/no
sshpass -p0 ssh -o StrictHostKeyChecking=no  root@10.12.153.146

使用sshpass获取ip地址
sshpass -p0 ssh root@10.12.153.146 "ip a"

指定文件
echo "0" > password
sshpass -f password ssh root@10.36.182.100 "ip a"

结合scp一起使用
sshpass -p 密码 scp file root@ip:/路径

远程解压
sshpass -p 密码 ssh root@ip -tt tar -xzf 远程文件.tar包 -C 解压路径

shhpass的脚本

批量拷贝文件
vim pass.txt
10.12.153.146 root 0 22
#!/bin/bash
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
INFO=pass.txt
for IP in $(awk '{print $1}' $INFO)
do
    USER=$(awk -v I=$IP 'I==$1{print $2}' $INFO)
    PASS=$(awk -v I=$IP 'I==$1{print $3}' $INFO)
    PORT=$(awk -v I=$IP 'I==$1{print $4}' $INFO)
    sshpass -p $PASS scp -o StrictHostKeyChecking=no $1 ${
   USER}@${IP}:$2  && \
    action "拷贝成功 $IP" /bin/true || action "拷贝失败 $IP" /bin/false
done
sshpass -p $PASS scp -o StrictHostKeyChecking=no $1 ${
   USER}@${IP}:$2  && action "拷贝成功 $IP" /bin/true || action "拷贝失败 $IP" /bin/false

$1:要scp的文件
$2:scp的目标路径
批量传递秘钥
vim pass.txt
10.12.153.146 root 0 22
#!/bin/bash
[ ! -f $HOME/.ssh/id_rsa ] && ssh-keygen -t rsa -b 2048 -N "" -f $HOME/.ssh/id_rsa
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
INFO=pass.txt
for IP in $(awk '/^[^#]/{print $1}' $INFO)
do
    USER=$(awk -v I=$IP 'I==$1{print $2}' $INFO)
    PASS=$(awk -v I=$IP 'I==$1{print $3}' $INFO)
    PORT=$(awk -v I=$IP 'I==$1{print $4}' $INFO)
    sshpass -p $PASS ssh-copy-id -o StrictHostKeyChecking=no ${
   USER}@${IP}  && action "秘钥传输成功 $IP" /bin/true || action "秘钥传输失败 $IP" /bin/false
done
ssh-keygen -t rsa -b 2048 -N "" -f $HOME/.ssh/id_rsa
-t:指定要创建的密钥类型
-b:指定密钥长度
-N:提供一个新密语
-f:指定用来保存密钥的文件名

ssh-copy-id:传输公钥的命令
批量修改密码
vim pass.txt
10.12.153.146 root 0 22
#!/bin/bash
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
OLD_INFO=old_pass.txt
NEW_INFO=new_pass.txt

for IP in $(awk '/^[^#]/{print $1}' $OLD_INFO); do
    USER=$(awk -v I=$IP 'I==$1{print $2}' $OLD_INFO)
    PASS=$(awk -v I=$IP 'I==$1{print $3}' $OLD_INFO)
    PORT=$(awk -v I=$IP 'I==$1{print $4}' $OLD_INFO)
    NEW_PASS=$(openssl rand -base64 8)
    sshpass -p "$PASS" ssh -p $PORT $USER@$IP -o StrictHostKeyChecking=no "echo $NEW_PASS | passwd --stdin $USER" && ( echo "$IP $USER $NEW_PASS $PORT [`date '+%F %T'`]" >> $NEW_INFO && action "配置成功 $USER $IP $NEW_PASS" /bin/true ) || action "配置失败 $USER $IP $PASS" /bin/false
done
sshpass -p "$PASS" ssh -p $PORT $USER@$IP -o StrictHostKeyChecking=no "echo $NEW_PASS | passwd --stdin $USER" && ( echo "$IP $USER $NEW_PASS $PORT [`date '+%F %T'`]" >> $NEW_INFO && action "配置成功 $USER $IP $NEW_PASS" /bin/true ) || action "配置失败 $USER $IP $PASS" /bin/false

远程连接,使用免交互方式更改用户密码,成功的情况下,将ip 用户 新密码 端口 日期追加到新密码的文件内,并输入配置成功;失败的情况下,输出配置失败 用户 ip 老密码

相关推荐

  1. linux系统shell语言自动化交互

    2024-01-07 12:24:03       32 阅读
  2. shell语言中expect交互

    2024-01-07 12:24:03       35 阅读
  3. 控件交互优劣势--自动窗帘系统

    2024-01-07 12:24:03       20 阅读
  4. linux shell脚本分享!一个系统信息查询工具箱

    2024-01-07 12:24:03       37 阅读
  5. Linux 系统下工作中常用shell命令

    2024-01-07 12:24:03       7 阅读
  6. Linuxshell脚本

    2024-01-07 12:24:03       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-07 12:24:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-07 12:24:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-07 12:24:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-07 12:24:03       18 阅读

热门阅读

  1. OpenVPN静态秘钥连接

    2024-01-07 12:24:03       40 阅读
  2. OQL详解

    2024-01-07 12:24:03       33 阅读
  3. Keil5,ARM编译器 软件优化注意事项

    2024-01-07 12:24:03       32 阅读
  4. CSS基础

    CSS基础

    2024-01-07 12:24:03      36 阅读
  5. 机械臂运动学逆解(牛顿法)

    2024-01-07 12:24:03       21 阅读
  6. C#-委托

    2024-01-07 12:24:03       36 阅读
  7. 可视化速通知识点

    2024-01-07 12:24:03       35 阅读
  8. android apk文件的签名问题

    2024-01-07 12:24:03       38 阅读