惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
J
Java Code Geeks
M
MIT News - Artificial intelligence
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
MongoDB | Blog
MongoDB | Blog
G
Google Developers Blog
Engineering at Meta
Engineering at Meta
量子位
S
SegmentFault 最新的问题
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
A
About on SuperTechFans
P
Proofpoint News Feed
Last Week in AI
Last Week in AI
Recent Announcements
Recent Announcements
腾讯CDC
I
InfoQ
F
Fortinet All Blogs
Hugging Face - Blog
Hugging Face - Blog
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
爱范儿
爱范儿

lvbibir's Blog

shell | 磁盘空间分析脚本 Linux cat 和 tee 命令写入文件 python | 使用 uv 管理你的 python 环境 Claude Code 完整配置指南 windows | mihomo 内核独立部署指南 linux | 磁盘扩容 wsl | 释放长久运行占用的磁盘空间 mysql | 线程上限问题处理 麒麟 7.6 安装谷歌 OTP 认证模块 suse 12sp5 升级 openssh 及 openssl suse 12sp5 部署 mysql 5.7 《谁的青春不迷茫》 docker | centos7 部署 docker vim | 基础配置和使用 windows | rime 输入法 & 雾凇方案 shell | sshpass 批量传输文件及执行命令 wsl | 原生 linux 方式安装 docker nodejs | fnm + pnpm 开发环境配置 wsl | 安装配置 miniconda 虚拟环境 wsl | 自动更新系统代理 wsl | bashrc 环境变量不正确加载的处理方法 wsl | win10 安装 wsl2 troubleshooting | ssh 成功但是 scp 失败 linux | 常用命令总结 docker 部署 piclist shell | 检测网站存活并自动钉钉告警 Zabbix | 监控端口连通性并自动追踪 TCP 路由 windows | 自定义开机快速启动项 windows | miniconda 配置 python 虚拟环境 Zabbix | 监控主机到指定 ip 的流量大小
troubleshooting | 安装 cloud-init 后导致 ssh 连接失败
lvbibir · 2021-12-01 · via lvbibir's Blog

0 前言

在 openEuler20.03 (LTS-SP1) 系统上进行一些测试,发现某个东西会自动修改 ssh 配置文件导致系统无法通过密码登录,最后排查是由于安装了 cloud-init 导致的。

image-20211217152941463

排查思路

出现这个问题前做的操作是安装了一些项目组同事指定的包,问题就应该出在这些包上

yum install -y telnet rsync ntpdate zip unzip libaio dos2unix sos vim vim-enhanced net-tools man ftp lrzsz psmisc gzip network-scripts cloud-init cloud-utils-growpart tar libnsl authselect-compat

大致看了下,除了 cloud-Init 和 cloud-utils-growpart 这两个包其他包基本不可能去修改 ssh 的配置

直接检索这两个包的所有文件中的配置,是否与 PasswordAuthentication 有关

[root@localhost ~]# grep -nr PasswordAuthentication `rpm -ql cloud-utils-growpart`
[root@localhost ~]# grep -nr PasswordAuthentication `rpm -ql cloud-init`

找到了修改这个参数代码的具体实现

image-20211217153934057

查看该文件

[root@localhost ~]# vim +98 /usr/lib/python3.7/site-packages/cloudinit/config/cc_set_passwords.py

具体的判断操作和修改操作

image-20211217154333149

修改操作就不去深究了,主要看下判断操作,可以看到判断操作是使用了 util.is_true() ,该 util 模块也在该文件中引用了

image-20211217154537176

再去找这个 util 模块的具体实现

python 引用的模块路径如下,否则会抛出错误

  • 文件的同级路径下
  • sys.path 路径下

并没有在同级目录下

[root@localhost ~]# ll /usr/lib/python3.7/site-packages/cloudinit/config/ | grep cloudinit

sys.path 路径不知道可以用 python 终端输出下

image-20211217155010363

在/usr/lib/python3.7/site-packages 路径下找到了 cloudinit 模块的 util 子模块

image-20211217155130708

查看 util.is_true 和 util.is_false 具体的函数实现

image-20211217160135163

逻辑很简单,判断 val 参数是否为 bool 值,否则对 val 参数的值进行处理后再查看是否在 check_set 中

image-20211217160347727

再回头看之前的 /usr/lib/python3.7/site-packages/cloudinit/config/cc_set_passwords.py 文件是怎样对 util.is_true 和 util.is_false 传参的

可以看到是由 handle_ssh_pwauth() 函数传进来的

image-20211217160810182

再继续找哪个文件调用了这个函数

还是这个文件,第 230 行

image-20211217160953184

这里参数 pw_auth 传的值是 cfg.get(‘ssh_pwauth’)

image-20211217161055461

cfg.get() 这个函数 get 的东西是 /etc/cloud/cloud.cfg 配置文件下的 ssh_pwauth 的值

image-20211217161359350

到这里,就可以回头再看整个逻辑了

  1. 调用 handle_ssh_pwauth() 函数,传了一个参数 pw_auth=0
  2. 调用 util.is_true() 和 util.is_false 函数,传了同一个参数 val=0
  3. 上述两个函数执行完后 cfg_val 的值最终为 no
  4. 调用 update_ssh_config({cfg_name: cfg_val}) 函数,cfg_name=PasswordAuthentication,cfg_val=no
  5. 即将 sshd 的配置文件的 PasswordAuthentication 值改为 no

以上

wechat_pay

微信

alipay

支付宝