expect学习以及ssh自动登录

Expect安装

expect是交互性很强的脚本语言,可以帮助运维人员实现批量管理成千上百台服务器操作,是一款很实用的批量部署工具!
expect依赖于tcl,而linux系统里一般不自带安装tcl,所以需要手动安装

下载:expect-5.43.0.tar和tcl8.4.11-src.tar
下载地址:https://pan.baidu.com/s/1kVyeLt9 
提取密码:af9p

将expect和tcl的软件包下载放到/usr/local/src目录下

(1)解压tcl,进入tcl解压目录,然后进入unix目录进行编译安装
[root@xw4 src]# tar -zvxf tcl8.4.11-src.tar.gz
[root@xw4 src]# cd tcl8.4.11/unix
[root@xw4 unix]# ./configure
[root@xw4 unix]# make && make install

(2)安装expect
[root@xw4 src]# tar -zvxf expect-5.43.0.tar.gz
[root@xw4 src]# cd expect-5.43.0
[root@xw4 expect-5.43.0]# ./configure --with-tclinclude=/usr/local/src/tcl8.4.11/generic --with-tclconfig=/usr/local/lib/
[root@xw4 expect-5.43.0]# make && make install

 

(3)安装完成后进行测试
[root@xw4 ~]# expect

2.执行ssh登录

#!/usr/bin/expect
set host [lindex $argv 0] 
set passwd [lindex $argv 1] 
spawn ssh -l root $host
expect "*password:"
send "$passwd\r"

linux下命令.

./scp.sh s101 12345

因为expect的参数从argv 0开始,

所以第一个是argv 0
scp.sh 是文件名称, #!/usr/bin/expect是expect的位置 

whereis expect 查看expect命令位置

如果你想要继续交互的话 就在最后加上 interact

#!/usr/bin/expect
set host [lindex $argv 0] 
set passwd [lindex $argv 1] 
spawn ssh -l hadoop $host
expect "*password:"
send "$passwd\r"
interact

3.debug

如果发现运行错误可使用调试模式

#!/usr/bin/expect -d
set host [lindex $argv 0] 
set passwd [lindex $argv 1] 
spawn ssh -l hadoop $host
expect "*password:"
send "$passwd\r"
interact
	

在第一行末尾多了一个 -d

调试结果如下

 

4.远程scp文件

#!/usr/bin/expect
set timeout 10
set host [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set dest_file [lindex $argv 3] 
set src_file [lindex $argv 4]
spawn scp  $username@$host:$dest_file  $src_file
 expect {
 "(yes/no)?"
  {
  send "yes\n"
  expect "*assword:" { send "$password\n"}
 }
 "*assword:"
{
 send "$password\n"
}
}
expect "100%"
expect eof

最后必须得有个expect  具体是expect eof 还是expect 别的都可以,否则不会执行scp命令

shell 命令(写入命令注意空格问题 )

./newscp.sh s101 root 123456 /home/hadoop/filetest /home/hadoop/bigdata

 

5.批量执行scp

 #!/bin/sh

  list_file=$1
  src_file=$2
  dest_file=$3
  
 cat $list_file | while    read line
  do
      host_ip=`echo $line | awk '{print $1}'`
      username=`echo $line | awk '{print $2}'`
      password=`echo $line | awk '{print $3}'`
      echo "$host_ip"
      ./expect_scp $host_ip $username $password $dest_file $src_file
  done

 


listfile.txt
192.168.28.133 hadoop hadoop
192.168.28.134 hadoop hadoop
192.168.28.135 hadoop hadoop
192.168.28.136 hadoop hadoop

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值