打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
脚本中中无交互地使用ssh/scp/svn--expect

crontab中无交互地使用ssh/scp/svn

2009年1月24日

今天在工作中遇到一个问题,需要在crontab中加入一个任务,以便能够定时从过程拷贝一些文件,并同时通过svn提交。这个看似简单的问题让我折腾了一阵子,记下来也许有人能用上。

这里的主要问题在于:crontab不允许任何交互操作,ssh的passphrase和svn的user/password都不能够输入。

原来ssh用的是ssh-agent的方案,每次登录的时候敲一遍passphrase就可以了,但在crontab中使用不允许这样的交互。查了一下,无交互的方案要使用ssh -i identity的方式,其中identity是指定private key的路径。但是如果private key存在着非空的passphrase的话,还是需要交互的操作。为了方便起见,我重新生成了一对公私钥,私钥使用了空的passphrase,并把公钥加入到要登录机器的.ssh/authorized_keys中。这样在crontab使用的脚本中,所有用到ssh或者scp的地方,都加上-i identity选项,就没有问题了。

遇到的另一个问题是这样:我们的svn是采用ssh认证的方式,也需要为一个指定的private key输入passphrase,但在crontab中也不允许这样的交互。svn中指定ssh参数的方法是增加一个环境变量,export SVN_SSH=”ssh -i identity”,这样如果使用一个无passphrase的private key的话,问题也就解决了。但是环境所限,登录这个svn必须使用一个有passphrase的private key。怎么办?最终的方案是采用了expect脚本。expect是一个自动化交互操作的工具。它的工作方式大概是:

  • spawn一个目标程序
  • expect一段预定义的提示信息
  • send一段响应的信息

可以利用expect脚本来自动化svn操作输入passphrase的过程。脚本如下:

#!/usr/bin/expect -f
spawn /usr/bin/svn ci xxxx -m “xxxx” # svn operation you want
expect {
“^Enter” { send “your pass here\n”; expect eof} # Enter xxxx is the prompt for inputing passphrase
eof { exit; } # in case svn is not been spawn successfully
}

上面都是现学现用的,错漏难免,但是目前是解决了我的问题。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
expect spawn、linux expect 用法小记
shell脚本实现无密码交互的SSH自动登陆
Linux expect详解
Linux Shell交互式自动化运维程序
0 SHELL训练营--day10_expect
linux自动登录ssh脚本
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服