ssh 从命令行连接正常,但从 cron 使用公钥

ssh 从命令行连接正常,但从 cron 使用公钥

为了从远程服务器(Centos 6.x)到本地客户端(Ubuntu 18.04)进行 rsync(增量),我将创建的公钥从客户端复制到服务器以在无需密码的情况下执行 rsync。

PasswordAuthentication yes在 sshd_config

在本地 Ubuntu 上我有一些可执行脚本,如下所示

#!/bin/sh

RSYNC=/usr/local/bin/rsync-incr
SSH=/usr/bin/ssh\ -p\ xxxx
ROTATE=60
RUSER=yyyy
RHOST=zzzz
RPATH=/path-to-remote-dir/
LPATH=/path-to-local-dir/

$RSYNC -az --rsh="$SSH" $ROTATE $RUSER@$RHOST:$RPATH $LPATH

我从命令行运行这个脚本/path-to-local-script-file

并且它表现良好,但如果我将这行添加到crontab -e

00 00   * * *   /path-to-local-script-file

执行时出现 cron 错误“权限被拒绝,请重试”

权限被拒绝(公钥、gssapi-keyex、gssapi-with-mic、密码)。rsync
:连接意外关闭(迄今为止收到 0 个字节)
[接收器] rsync 错误:io.c(235) 处出现无法解释的错误(代码 255)[接收器=3.1.2]
*** 错误:rsync 返回代码 255

显然这是一个权限问题。我不明白的是为什么我能够/path-to-local-script-file从命令行执行并以用户身份成功执行 rsync 任务myname,却无法cron以同一用户身份执行 (crontab -e)。

编辑 1:我创建了一个没有密码的新密钥,删除了远程服务器上 authorized_keys 中带有公钥的旧 rsa-ssh 行。
同样的行为,从命令行运行脚本正常,但 cron 拒绝权限

编辑 2:
从命令行连接 ssh 的服务器日志

5 月 23 日 10:20:53 主机 sshd[21067]: 已接受来自 xxx.xxx.6.13 端口 42836 ssh2 的 root 公钥

5 月 23 日 10:20:53 主机 sshd[21067]: pam_unix(sshd:session): 由 (uid=0) 为用户 root 打开会话

从 cron 连接 ssh 的服务器日志

5 月 23 日 10:17:03 主机 sshd[18163]: 来自 xxx.xxx.6.13 端口 42514 ssh2 的 root 密码失败

5 月 23 日 10:17:03 主机 sshd[18163]: 来自 xxx.xxx.6.13 端口 42514 ssh2 的 root 密码失败

5 月 23 日 10:17:03 主机 sshd[18164]: xxx.xxx.6.13 关闭连接

答案1

看起来您正在以非 root 用户身份手动运行该脚本,而 cron 正在以 root 用户身份运行该脚本。

如果是这种情况,那么您将需要定义 ssh 私钥的路径。

如果你以 root 身份连接到远程服务器(不好),那么你将需要 root authorized_keys 来获得工作站的公钥

相关内容