我有一个用 shell 脚本编写的非常简单的 cron 作业,它将文件从另一台服务器 scp 到本地。例如,
#!/bin/bash
scp $REMOTE:/$FILE ./
当然,服务器需要私钥才能登录,我有一个配置文件,其中保存了 HostName 和 IdentityFile (~/.ssh/id_rsa,一个带有 600 的 mod)。
但是,cron运行时出现“权限被拒绝”的问题......
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/xxx>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=xxxx>
Message-Id: <20120118235702.33A7B16C03B5@xxx-xxxx-deskbox>
Date: Wed, 18 Jan 2012 18:57:02 -0500 (EST)
Permission denied (publickey).
我到处检查了,它说 crontab 将作为所有者/用户的环境运行。
有人有解决方案吗?谢谢!
答案1
问题解决了。我的 id_rsa 密钥上有一个密码短语。因此,手动运行不需要它,因为该短语在会话中;而 crontab 需要密码短语。删除密码短语
ssh-keygen -p [-P old_passphrase]
并输入空的新密码;或检查这一页
希望我的回答可以帮助一些程序员节省几个小时的调试时间。