一、问题发生、排查以及解决

某天H博士在登录B服务器时发现一个严重的问题,问题是H博士在执行脚本出现一个异常,这个异常是过去我执行脚本只需输入一次密码,现在要输入五六次,只有输入五六次后才能正确执行完脚本。这个问题非常严重。我记得那天ZH向我请教了几个关于Linux授权的问题。而后第二天H博士就开始反馈这个异常。于是ZH先处理,一直找不到问题在哪,于是便叫我来,一同排查是什么原因。
H博士那边给我们提供一个方案,他怀疑是SSH密钥失效导致的,于是我们按照H博士提供的方案一一执行,发现还是不行。
而且在验证H博士提供的方案之前,我参考我之前写过的文章:Linux远程传输文件免密码
试验开发服务器,按照我这边试验的,A服务器上的用户可以免密登录B服务器,而B服务器上的用户可以免密登录A服务器,前提是将彼此ssh-keygen -t rsa 生成密钥放入.ssh/authorized_keys即可。
我按照我之前写过试了试,完全没有问题。
由此排除了是密钥的问题。
接着怀疑是权限的原因,最后我给H博士经常使用的用户授予最大权限chmod 777或chown -R 用户 文件夹。但发现仍解决不了这个问题。
最后ZH和我一时想不到有效的办法,ZH就准备重装系统了,先从B服务器开始入手。
而我最初想着重装太费劲了,主要是备份很多东西和安装很多奇葩环境,一直在想如何解决这个问题。
某天灵感突然一来,明确我们的问题(登录某个用户执行该用户所属目录的脚本需要输入多次密码),我使用root用户新建了一个用户,按照H博士之前提供的方案,切换到新用户,执行相关命令,然后验证是否需要输入密码,最后发现完全不要。我此时还没有意识到是用户组权限问题。

为了解决这个问题,归纳一下,我试了如下方法:

  • 认为是权限问题,授予该用户最大权限;
  • 认为是密钥问题,使用该用户执行重新生成密钥步骤;
  • 两台服务器存放密钥验证免密(最初定位错了问题,认为是两台服务器需要交互操作);
  • 重新新建用户验证是否免密;
  • 修改ssh配置文件。

最后均不能解决这个问题,后来我只能表示黔驴技穷,ZH也想不到更好的办法,基本上搜索引擎我们能搜的,能尝试的都尝试了,都不能解决这样的问题,ZH还亲自读脚本和执行脚本一步步用echo输出调试,还是不能定位问题根源在哪。最后我们采用最后的方案,重装系统,回归原来的环境。

ZH当时重复说了多次,我就仅仅动了一下用户权限,其它什么都没有动(这是一条非常关键的信息,当时我并未重视起来,仅仅是表面的以为没有权限,授个权就行了)。

自到ZH重装以后,再次授权,复现了这个问题,然后我叫他别动,我在此新建一个用户,发现执行免密登录所需步骤后,可以不用输入密码。最后他再次快速重装,什么都没有动,然后我使用H博士常使用的用户验证是否输入密码(在此安装免密步骤执行了),最后发现不要,问题就这么解决了。
后来过了一段时间,ZH再次给我反馈有这么一个问题,我问他做了什么操作,他回答到H博士经常操作的是A用户,但是我们部署微服务的是放在B用户上,B用户需要读A用户下的某个文件,于是他给B用户递归授权A用户目录,最后再次验证A用户是否需要输入密码,最后发现需要输入了。最后我使用ll命令查看了/home下的用户权限,发现有问题,譬如/home/A的用户和用户组应该是A A,而不是A B这样的,此次我发现A B。最后我断定一定是A用户的权限组不明确 生成的密钥与权限组有非常大的关联,如果权限组变了,密钥是无法识别的,于是造成A用户执行脚本时需要输入多次密码。
经常多次试验,果真是这个原因。
但因为B用户上部署的微服务程序需要访问A用户下的目录,这个问题不解决会有很大的影响,最后我们的方案是,/home下的A用户和B用户各自做各自的事情,不能交叉,例如A用户除了执行脚本外,还可以执行部署微服务,脚本执行每天人为地固定执行,而程序是自动化的,B用户仅仅是部署,完全没有这个必要,于是A用户只做两件事情,一件事情是执行脚本,另外一件事情是部署微服务,因为后续脚本将会自动化,所以A用户最终的职责就是部署微服务,由此我们推出了一个新的原则,叫做用户专一原则(一个用户只做一件事情或一类事情)。

二、总结

这个问题说大不大,说小也不小,足足磨了我们半个多月的时间,当然了,半个多月虽然还有其它的开发任务,但这个问题卡在这,让人着实不爽。虽然最终解决了,但我仍不高兴,因为明明我可以在几个小时内或不用几个小时就能快速解决这个问题,但最后却足足耽搁了半个多月。

1.之后我在想为什么这个问题这么长才定位到原因?

我想关键在于问题复现步骤上,首先我没有与ZH仔细沟通,询问他做了什么操作(没有具体到原来是给B用户授予A用户的权限),而仅仅是得到一个大致不精确的回答了授了一下权限。如果试想当初我追根刨底,具体到执行了什么命令,我想用不了这么长时间就能快速解决,因为问题本身并不难。
由此推出,原因在于我没有仔细询问ZH在该服务器上做了哪些操作,执行哪些具体命令,导致我错误的定位问题,如扫雷式排查,一个个试。
可见,遇到问题并不可怕,可怕的是没有找问题发现者,仔细询问是如何发现这个问题的,以及在发现这个问题时做了那些操作(因为这些操作可能是导致问题发生的引子)。

2.以后将如何避免这样类似的问题?

我总结出如下两个原则:

    • (1)面对他人发现的问题,首先要仔细询问他是如何发现的或在此做了些什么(非常关键,需要重点留意),在与问题发现者的不断沟通中,得到更多的信息,这些信息实际上有助于问题的正确定位(这一刻我明白了磨刀不误砍柴工);
    • (2)在(1)的基础上,根据从(1)所知的信息和结合以往的经验,找到问题的可能原因,定位问题并解决,另外必要时可请教相关专业人士提供帮助,在请教前,记得将问题陈述清楚(如问题是如何发现的、问题发现前做了哪些事情、为了解决这个问题根据问题可能原因尝试用哪些方法去解决等)。

ssh问题之复盘的更多相关文章

  1. 管中窥豹-ssh链接过多的问题分析及复盘

    缘起 某一天,产品侧同事联系过来,反馈话单传输程序报错,现象如下: 实际上,该节点仅提供了一个sftp服务,供产品侧传输话单过来进行临时存储,由计费部门取走而已. 分析 于是找运维同事上服务器看了下情 ...

  2. 经典案例复盘——运维专家讲述如何实现K8S落地

    经典案例复盘——运维专家讲述如何实现K8S落地 背景介绍 运满满自开始微服务改造以来,线上线下已有数千个微服务的 Java 实例在运行中.这些 Java 实例部署在数百台云服务器或虚机上,除少数访问量 ...

  3. [linux]阿里云主机的免登陆安全SSH配置与思考

    公司服务器使用的第三方云端服务,即阿里云,而本地需要经常去登录到服务器做相应的配置工作,鉴于此,每次登录都要使用密码是比较烦躁的,本着极速思想,我们需要配置我们的免登陆. 一 理论概述 SSH介绍 S ...

  4. SSH实战 · 唯唯乐购项目(上)

    前台需求分析 一:用户模块 注册 前台JS校验 使用AJAX完成对用户名(邮箱)的异步校验 后台Struts2校验 验证码 发送激活邮件 将用户信息存入到数据库 激活 点击激活邮件中的链接完成激活 根 ...

  5. 记录一则Linux SSH的互信配置过程

    需求:四台Linux主机,IP地址为192.168.10.10/11/12/13,配置登录用户的互信 1.各节点ssh-keygen生成RSA密钥和公钥 ssh-keygen -q -t rsa -N ...

  6. SSH免手动输入密码和设置代理

    通过使用sshpass将密码写入命令里,直接执行,免去手动密码输入的步骤命令如下: sshpass -p password_abc ssh user_abc@ssh_host -p ssh_port ...

  7. github免输用户名/密码SSH登录的配置

    从github上获取的,自己整理了下,以备后用. Generating an SSH key mac windows SSH keys are a way to identify trusted co ...

  8. Linux 利用Google Authenticator实现ssh登录双因素认证

    1.介绍 双因素认证:双因素身份认证就是通过你所知道再加上你所能拥有的这二个要素组合到一起才能发挥作用的身份认证系统.双因素认证是一种采用时间同步技术的系统,采用了基于时间.事件和密钥三变量而产生的一 ...

  9. mac下生成ssh keys 并上传github仓储

    使用github仓储需要本机生成一个公钥key 添加到自己的git账户SSH keys中   mac 生成方法:   1. 打开终端 输入   ssh-keygen 然后系统提示输入文件保存位置等信息 ...

随机推荐

  1. 刷题记录:[GWCTF 2019]枯燥的抽奖

    目录 刷题记录:[GWCTF 2019]枯燥的抽奖 知识点 php伪随机性 刷题记录:[GWCTF 2019]枯燥的抽奖 题目复现链接:https://buuoj.cn/challenges 参考链接 ...

  2. 认识css常见的hack

    一.认识css hack CSS Hack只要是来解决浏览器局部的兼容性问题,主要是因为每个浏览器对css的解析各不相同,导致输出到页面的效果的差异: 二.css hack的三种常见形式:css属性h ...

  3. 【题解】P6329 【模板】点分树 | 震波

    题外话 (其实模板题没必要在这里水题解的--主要是想说这个qwq) 小常数的快乐.jpg 我也不知道我为啥常数特别小跑得飞快--不加快读就能在 luogu 的最优解上跑到 rank5 ( 说不定深夜提 ...

  4. 题解-Words

    题面 Words 有 \(n\) 天,每天插入一个字符集大小为 \(c\) 长度为 \(l\) 的字符串,求每一天建立 \(\tt Trie\) 树的期望节点数(根节点不算)模 \(998244353 ...

  5. AcWing 324. 贿赂FIPA

    题目链接 大型补档计划 \(f[i][j]\) 表示第 \(i\) 个国家,获得 \(j\) 个国家支持,用的最少花费 \(f[i][0] = 0\) \(f[i][sz[i]] = w[i]\) 对 ...

  6. 不会吧不会吧,还有开发不会Java填充PDF模板数据的,赶紧看看吧

    思路 根据业务需求,获取实际业务数据,借助itext库功能,将业务数据填充入提前制作好的PDF模板中 操作步骤 制作PDF模板:提前下载好Adobe Acrobat Pro DC 效果展示 准备PDF ...

  7. uni-app全局属性和方法

    全局变量和全局方法是软件开发中常用的技术点! 实现方式大致分为: 1.vuex实现,值变动灵活 2.建立js文件,页面内引用 3.挂载vue实例后使用 4.小程序中的globalData 5.本地存储 ...

  8. GET和POST的区别与联系

    每日知识-GET和POST HTTP:超文本传输协议 组成部分:请求行,请求头部,一个空行,请求数据 GET和POST GET:get就是获取的意思,默认的HTTP请求方式,把参数通过 key/val ...

  9. Spark内核-部署模式

    Master URL Meaning local 在本地运行,只有一个工作进程,无并行计算能力. local[K] 在本地运行,有K个工作进程,通常设置K为机器的CPU核心数量. local[*] 在 ...

  10. python爬虫爬取安居客并进行简单数据分析

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 爬取过程一.指定爬取数据二.设置请求头防止反爬三.分析页面并且与网页源码进行比对四.分析页面整理数据 ...