crontab中使用scp提示’permission denied’的解决方法

曾经有一段时间需要从集群中的一台服务器收集数据,并放到另一台服务器上。手工做了几次,实在是烦了。于是写了个脚本加上crontab来做这件事情,脚本内容大致如下:

#!/bin/sh
# file: script.sh
#1. collect some data…
#2. generate data file
scp data_file someuser@somehost:~/destination/today.data
echo "[Today] collect data completed." >> /tmp/collect.log

而crontab的内容也很简单:

* 16 * * * cd path_of_script; sh script.sh

当然,在放到crontab之前,我用手动运行过个脚本,是可以正确的收集数据,并且将收集到的数据复制到另一台服务器的指定路径。为了记录收集情况,每当执行完后,都会在/tmp的日志中写入一条log。

我在crontab中设定了让这个脚本每天下午4点钟开始执行,可是第二天下午5点钟了,同事说当天的数据没到收集到。我觉得很奇怪,登录到这台机器上发现日志里已经显示当天的"collect data completed"了,但不知道为什么,数据没有复制过去。想了想,把脚本和crontab都稍做了修改:

script.sh:

#!/bin/sh
# file: script.sh

#1. collect some data…
#2. generate data file
scp data_file someuser@somehost:~/destination/today.data
echo "[Today] collect data completed."

crontab:

* 16 * * * cd path_of_script; sh script.sh &> /tmp/collect.log

不仅记录自己输出的日志,而且把scp的stdout也记录下来。第三天下午4点过了,数据依然还是没有复制到目的机器上,查看collect.log发现当天的日志是:

Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
lost connection
[2010-08-30] collect data completed.

这时候我才想起来,这台机器压根就没有可用的key来登录到目的机器!当初我之所以能成功地执行脚本是因为我是开启了ssh_config中的ForwardAgent,在执行脚本中的scp时,使用了我的key,而当我退出这台机器后,它便无法再登录到目的机器,因而亦不能执行scp了。

找到原因后,问题就好解决了。在收集数据的机器上使用ssh-keygen产生一对rsa公私钥对。把公钥追加到目的机器的"/home/someuser/.ssh/authorized_keys"中,然后使用scp时加上-i选项来指定私钥的位置即可,修改后的脚本如下:

#!/bin/sh
# file: script.sh
#1. collect some data…
#2. generate data file

scp -i ~/.ssh/id_rsa data_file someuser@somehost:~/destination/today.data
echo "[Today] collect data completed."

记住,退出机器前先使用ssh -i ~/.ssh/id_rsa someuser@somehost来登录到目的机器,不然下次crontab运行时,scp会傻傻地等着你输入yes来确定把目的机器加到known_hosts里。

“air”的杯具

所谓"air",也就是我那高仿mac book air的华硕ux30了。在电脑城转悠了几个小时后,我毅然为它而买单了。

ux30系列是超轻薄系列,而我的"air"则是这个系列中最低端的那款。不过即使配置低,只要能让我开个vim写代码,然后在Chrome上再打开几个网页看看,基本上我就能满足了。

机器买回来后,一切事情都朝着的方向发展。可是就在昨天凌晨,当我准备看部电影再睡觉的时候,为了获得更好的声音效果,我插上了耳机。平时插耳机时都会找准插孔,昨天就因为懒得再歪过头去看插孔,结果一头插在了USB接口上。话说这是两种类型接口,应该叫做牛头对不上马嘴,可是,偏偏牛头对上马嘴的那一瞬间,机器黑屏了。黑得很纯净的那种,其实就是断电啦。耳机插头接触到USB的上下金属片,导致短路了。于是我就慌了,当时电源还插着呢,马上拔了电源,再按开机键,没有一点儿反应,顿时就觉得自己和"air"化身成了一个大杯具。

于是拿过笔记本包,找出保修卡,打24小时服务热线。不错电话很快就通了,但是听到这么一段录音,“400热线从8月7号晚上8点至8月8号晚上8点进行系统维护”,立马全身黑线掉。笔记本挂了,打服务热线还不通,真TMD背,真是喝西北风还打嗝啊。

没法,拿出手机上网,找温州华硕维修点,还好发现一个维修点就在附近500米的地方。遂安心了,然后又找“华硕笔记本 USB 短路”,看到很多人都是因为插错地方导致开不了机了,心想不管走到哪里,天下果然还是有同路人的,哈哈。后来看到一篇文章,一哥们因主板有USB短路保护功能,死机后还能恢复。看到这里,我正好想到原来在看说明书时,发现本本背面有个重置按键的。其实也不能叫做按键,那地方像以前818手机的硬启功能一样,需要用牙签去捅。好吧,就死马当做活马医一次,找牙签去。

在客厅翻了翻,居然还真找到牙签了,拿过来一捅,然后再按开机,挖草!成功了!屏幕顺利点亮了!系统成功进入了!哈哈哈!

短路不死的小强,哥很欣赏你。:D

那间电影院

做为熟悉中文和略晓英文的当代毕业生,我一般不太选非这两种语言的电影来看。因为在内地,中文电影几年都难得拍出部好片子。不是弘扬主旋律的洗脑片,就是花了无数本钱但拍出来还是带着浓浓山寨气息的娱乐片。所以值得听看并且有能力听看也就只剩下英文片了,随着字幕的飞逝,偶尔还能听懂几句台词。要是换成其它语言的片子,就算换成另一部电影的字幕,也不一定能鉴别得出来。

《天堂电影院》是意大利的一部片子,选这部片子有两点原因:其一、新出炉洗脑片《XX大地震》号称感人至死。在QQ签名上,校内状态上,各式各样的分享上,都流传着观众泪尽而亡的传说,于是我想趁着还活着,去尝尝死的滋味。但找遍了各大视频网站,也没发现有个全集出来,这应该是Vobile的VideoTracker功劳吧。其二、无奈在豆瓣上想找部可以看的电影,看到有人推荐《天堂电影院》,88年的片子,VideoTracker应该不会再去通知下架了吧,于是在Y酷上找了部号称高清的开始看了。 继续阅读“那间电影院”