linux sftp自动输入密码,使用autoexpect避免sftp输入密码

先是从数据库中导出所需文件,再将此文件转移至一个web server,然后通过此web server用sftp传输给第三方的server

所用到的脚本依次如下

先从数据库导出文本,并scp到web server

--为避免输入密码时候人机交互,需要将两个server配置用户等价

[oracle@justin tools]$ more sftpchenying.sh

source /home/oracle/.bash_profile

date1=`date --date='1 day ago'  +%Y%m%d`

/justin/./sqluldr2_linux64_10204.bin  justin/**** sql=/justin/sftp.sql field=## charset="ZHS16GBK" file=/justin/product"$date1".csv

scp /justin/product"$date1".csv

rm /justin/product"$date1".csv

在中转server上部署以下脚本

[deploy@justin ~]$ more sftp.sh

date1=`date --date='1 day ago'  +%Y%m%d`

sftp -oPort=3222 justin@*.*.*.* << END

cd /upload

lcd /home/deploy

mput product$date1.csv

END

rm /home/deploy/product$date1.csv

同样为了避免sftp输入密码的人机交互,使用expect命令

先通过root用户yum install expect安装expect,然后输入autoexpect sftp.sh,此时会产生一个名为script.exp的文件,每次只需调用./script.exp即可自动完成sftp到remote server并上传文件的操作

似乎只能通过./script.exp的方式调用该文件,设置crontab时候比较麻烦,可以新建一个文件

[deploy@justin ~]$ more sftpexec.sh

cd /home/deploy

./script.exp

Crontab设置则如下

[deploy@justin ~]$ crontab -l

0 2 * * * sh /home/deploy/sftpexec.sh > /home/deploy/sftpexec.log 2>&1

而生成的script.exp内容如下

[deploy@justin ~]$ more script.exp

#!/usr/bin/expect -f

set force_conservative 0  ;# set to 1 to force conservative mode even if

;# script. wasn't run conservatively originally

if {$force_conservative} {

set send_slow {1 .1}

proc send {ignore arg} {

sleep .1

exp_send -s -- $arg

}

}

set timeout -1

spawn ./sftp.sh

match_max 100000

expect -exact "Connecting to *.*.*.*...\r

password: "

send -- "password\r"

expect eof

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值