![让 cron 解析 SSH 配置文件以获取服务器地址和选项](https://linux22.com/image/1408264/%E8%AE%A9%20cron%20%E8%A7%A3%E6%9E%90%20SSH%20%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E4%BB%A5%E8%8E%B7%E5%8F%96%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%9C%B0%E5%9D%80%E5%92%8C%E9%80%89%E9%A1%B9.png)
如何配置 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 作业来判断)