linux下的expect的简单用法及举例

expect使用举例

1、使用expect前,需要先安装两个rpm包

# rpm -ihv expect-5.43.0-8.el5.i386.rpm

# rpm -ihv expect-devel-5.43.0-8.el5.i386.rpm

2、使用脚本文件的例子--实现自动输密码

#!/usr/bin/expect -f
set password 123456

#download
spawn scp root@192.168.1.218:/root/a.wmv /home/yangyz/
set timeout 300 
expect "root@192.168.1.218's password:"
set timeout 300 
send "$password\r"
set timeout 300 
send "exit\r"
expect eof    

3、在sh脚本中嵌入expect的例子--通过连上一个公网的服务器再转跳到一个内网的服务器上,用脚本实现不用输密码,直接使用./goto.sh servername

#!/bin/bash

passmsmallq10="a"
passzhsh="a"
passfcwr="b"
passwapfx="c"
passadfx="d"

ip1="200.100.10.10"
ip2="10.100.100.70"
ip3="10.100.100.60"
ip4="10.100.100.10"
ip5="10.100.100.20"

case $1 in 
  "zhsh") passstr=$passzhsh ipstr=$ip2 ;;
  "fcwr") passstr=$passfcwr ipstr=$ip3 ;;
  "wapfx") passstr=$passwapfx ipstr=$ip4 ;;
  "adfx") passstr=$passadfx ipstr=$ip5 ;;
  *) echo "The parameter $1 isn't exist"
  exit 0 ;; 
esac

command1="ssh -l m_smallq -p 36000 $ip1"
command2="ssh -l mqq -p 36000 $ipstr"

expect -c "
        set timeout 60;
        spawn $command1;
        expect {
                \"221.130.15.10's password:\" {send \"$passmsmallq10\r\"; exp_continue}
                \"m_smallq\" {send \"$command2\r\"; exp_continue}
                \"mqq's password:\" {send \"$passstr\r\";interact}
                }
"

对上面例子的expect的解说

expect -c "..."  --里面输入命令

expect {...}     --里面的多行记录,从上向下扫描匹配,谁先匹配谁先处理。

4、ssh到另一台机子执行df -h后退出,要点是send后面可以跟多个命令,通过\r来分行成多个命令

#!/bin/bash
ip1="183.62.178.191"
command1="ssh -l root -p 14322 $ip1"

expect -c "
        spawn $command1;
        expect {
                \"183.62.178.191's password:\" {send \"aa\r\"; exp_continue}
                \"root@\" {send \"df -h\r exit\r\"; exp_continue}
         }
"

sshpass+ssh+expect非交互密码登陆

实现ssh自动登陆 试了下目前有三种方法:生成公钥、使用expect、sshpass+ssh

主要介绍sshpass 用于非交互的ssh 密码验证,shpass 参数 ssh,scp命令
将参数password作为密码
-f passwordfile 提取文件passwordfile的第一行作为密码
-e 将环境变量SSHPASS作为密码

#sshpass -p "321" ssh root@192.168.2.100
#sshpass -p "321" scp file.test root@192.168.2.100:/root/test/
对于ssh的第一次登陆,会提示:
“Are you sure you want to continue connecting (yes/no)”,这时用sshpass会不好使,可以在ssh命令后面 -o StrictHostKeyChecking=no
来解决。

比如说上面的命令,就可以写作
#ssh  abc@192.168.1.100 -o StrictHostKeyChecking=no

sshpass+expect实现远程修改主机密码

#!/bin/bash
#localhost:192.168.2.100
#remotehost:192.168.2.101

password="321"
expect -c " set timeout 5
    spawn sshpass -p "321" ssh root@192.168.2.101
    send "passwd\\r"
    expect {
        Enter* {send -- 123\r; exp_continue}
        Retype* {send -- 123\r; exp_continue}
    }
"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值