shell脚本无密码登录 expect

shell脚本无密码登录 expect的使用方法详解

今天需要做一个定时任务脚本将最新的数据包文件传到远程的服务器上,虽然有密钥但也是要求输入密码的那种,所以只能另想办法实现让脚本自动输入密码了。

从网上查到使用expect可以,简单研究了一下,效果不错。

因为我的操作系统没有安装expect,所以直接"yum -y install expect",你可以根据你的操作系统安装expect,或者源码编译。
安装好之后就可以使用了,这里有几种方法:

一、单独写一个脚本

#!/usr/bin/expect 
#使用第一个参数 
set server_ip [lindex $argv 0] 
#后面的也可以用参数[lindex $argv n] 
set server_port 22 
set server_dir /home/test
set server_user test
set server_pswd test
set scp_file auto_scp.sh 
                                                
# 设置超时时间 
set timeout 60 
spawn scp -P $server_port $scp_file $server_user@$server_ip:$server_dir 
expect { 
    "passphrase"
    { 
      send "$server_pswd\n"; 
    } 
    "password"
    { 
       send "$server_pswd\n"; 
    } 
    "yes/no"
    { 
       send "yes\n"; 
       exp_continue; 
    } 
} 
expect eof

我这里的变量都是随意设置的,你可以根据你的情况进行选择,保存退出之后,对该文件加上可执行权限,运行
"./auto_scp.sh 2.2.2.2"就可以了,"2.2.2.2"就是传入的第一参数。

"passphrase"和"password"等就是要监测的输入提示的一部分,send "$server_pswd\n"就是要执行的命令。

二、在脚本中使用----我比较喜欢这个

我这里使用的是Here document方法。

...... 
...... 
expect <<!! 
set timeout 60 
spawn scp -P $server_port $scp_file $server_user@$server_ip:$server_dir 
expect { 
    "passphrase"
    { 
      send "$server_pswd\n"; 
    } 
    "password"
    { 
       send "$server_pswd\n"; 
    } 
    "yes/no"
    { 
       send "yes\n"; 
       exp_continue; 
    } 
} 
expect eof 
!! 
......

变量都是我从配置文件中获取的,这里不再赘述了。

三、在脚本中使用

也是在脚本使用,但是不是用的Here document方法,而是使用expect -c 参数书,"-c"选项后面的字符串填充的就是命令。但是要注意本身字符串的转义符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值