让 cron 解析 SSH 配置文件以获取服务器地址和选项

让 cron 解析 SSH 配置文件以获取服务器地址和选项

如何配置 cron 来解析~/.ssh/config以获取IP 地址和其他选项(例如 IdentityFile)用于 SSH?显然添加source /home/user/.ssh/config没有帮助。

我不想在从 cron 运行的脚本中添加选项,因为它会调用 20 多个具有不同选项的服务器。~/.ssh/config当 IP 地址或 PEM 密钥更改时,我会保持文件更新,我不想重复这一努力到另一文件进行维护。

Cron 不会继承用户配置的环境。因此,对于给定的脚本:

$ cat .ssh/config
Host alpha
    Hostname 1.2.3.4
    User dotan
    IdentityFile ~/.ssh/Dotan.pem
    IdentitiesOnly yes

$ cat script.sh
#!/bin/bash
echo "Alpha"
ssh alpha dmesg

这有效:

$ ./script.sh > output.log
$ cat output.log
Alpha
[73542728.181371] type=1400 audit(1397118713.764:13): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=710 comm="apparmor_parser"

然而,这个 cronjob不起作用

0 0 * * * /home/dotan/script.sh > /home/dotan/output.log

输出为:

Alpha

这证明脚本运行了,但是 SSH 连接失败。

编辑: 我刚刚发现 ssh 有指定配置文件的选项-F /home/dotan/.ssh/config,但这并不能解决问题。

答案1

env您的环境会有所不同。比较使用和不使用 cron 运行时的输出。

另外,你把它放在 cron 的哪里?它是以你的账户运行,还是以 root 身份运行(无法通过查看你的 cron 作业来判断)

相关内容