设为首页 收藏本站
查看: 578|回复: 0

[经验分享] Crontab执行脚本中的ssh命令访问被拒绝

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-12-19 11:39:42 | 显示全部楼层 |阅读模式
本帖最后由 7564321 于 2016-12-19 11:40 编辑

我们经常会通过crontab来执行定时任务,通常生产环境中在不同主机直接进行登录是通过ssh来连接的。比如我们通过在备份服务器上设定定时任务,定期通过scp(使用SSH的远程拷贝命令)来拷贝远程服务器的数据到备份服务器上,这也是我遇到的一个事情。

环境描述:

脚本与定时任务:
定时任务设置如下:

无论是否执行成功,都把信息输出到2222.txt中
QQ截图20161219113950.png
脚本内容如下:

我这里仅用ssh命令来测试,实际上这个命令如果可以正常执行的话,你执行scp命令也一样
1
2
#!/bin/bash
ssh -v 192.168.50.135 'ls'




报错信息:
下图是crontab执行定时任务中的脚本的报错信息
你发现TCP连接是成功建立的,然后也在备份服务器上的~/.ssh/目录中的known_hosts文件中找到了host key。这个key是对方主机的公钥。在/etc/ssh/ssh_config中的 StrictHostKeyChecking 的值决定了是否把对方的公钥放在known_hosts文件中。如果是yes则表示不存放,如果是no则表示存放,如果是ask则表示询问。
下图这个意思是说KEY找到了而且匹配,就是说备份服务器存的对方服务器的公钥和对方现在使用的公钥一致。

最后是尝试发送自己使用的公钥让对方去验证,这里尝试了几次,并且更换了几种验证方式均宣告失败,所以最后拒绝访问。
QQ截图20161219113957.png
下图是单纯运行脚本的输出信息:也就是直接在终端中运行脚本

可以看到验证是通过的,不过你会发现它使用的是一个叫做id_dsa的公钥文件发送给服务器,然后对方接受了。可是我这个备份服务器本地的~/.ssh/目录中并没有id_dsa的文件
QQ截图20161219114004.png

我发现跳板机(Linux的跳板机,一般登录IDC的机器都要登录到跳板机,而且其他服务器也只接受来自跳板机的IP信息,你就算拨入了VPN,如果不先连接到跳板机,你也是无法登录服务器的,那可能有人问,我通过跳板机连接到了服务器,然后从这个服务器再SSH到另外的服务器是否可以呢?可以)的~/.ssh/目录中有id_dsa文件,于是我就拷贝到我的备份服务器上,测试后依然失败。

排查问题:

查看env
QQ截图20161219114012.png

修改脚本:
修改~/.bashrc文件,也就是本地变量文件,在文件中增加如下内容,这些内容和也就是之前通过env查看到的
1
2
3
4
export SSH_CLIENT="192.168.90.58 14567 1314"
export SSH_TTY=/dev/pts/2
export SSH_AUTH_SOCK=/tmp/ssh-cvRpw15068/agent.15068
export SSH_CONNECTION="192.168.90.58 14567 192.168.90.91 1314"




修改脚本
1
2
3
#!/bin/bash
source $HOME/.bashrc
ssh -v 192.168.50.135 'ls'




验证:
再次执行就成功了。

总结:
crontab执行脚本不成功通常都是环境变量导致的,因为crontab执行脚本属于非登式shell,针对这种它是不加载/etc/profiel和~/.bash_profile。它的会先加载~/.bashrc,然后加载/etc/bashrc,最后加载/etc/profile.d/下的变量。所以我在家目录中的bashrc中设置了和env中一样的变量,这样在脚本里面指定就可以了。如果你只是在basrc中写,而不在脚本中source初始化文件也不行。原因我猜测可能是跟crontab自己的环境变量有关,而且在/etc/rond的配置文件中设置环境变量不生效,不知道为什么。

所以在crontab执行脚本,通常的建议是命令写全路径,另外还应该设置好环境变量
1
2
3
#!/bin/bash
source /etc/profile
source $HOME/.bashrc



如果是ssh这种远程执行,可以使用-i参数指定公钥。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-316440-1-1.html 上篇帖子: 安装emlog 报错服务器不支持zip模块,无法在线安装主题模板 下篇帖子: No package 'libpcre' found
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表