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

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
G
GRAHAM CLULEY
Spread Privacy
Spread Privacy
Last Week in AI
Last Week in AI
腾讯CDC
P
Privacy & Cybersecurity Law Blog
WordPress大学
WordPress大学
C
Cybersecurity and Infrastructure Security Agency CISA
Security Archives - TechRepublic
Security Archives - TechRepublic
博客园 - 司徒正美
爱范儿
爱范儿
雷峰网
雷峰网
The Hacker News
The Hacker News
S
SegmentFault 最新的问题
Cisco Talos Blog
Cisco Talos Blog
博客园 - 聂微东
T
Tor Project blog
I
Intezer
大猫的无限游戏
大猫的无限游戏
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Schneier on Security
Schneier on Security
T
Tenable Blog
Google Online Security Blog
Google Online Security Blog
S
Schneier on Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
AI
AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
Help Net Security
Help Net Security
O
OpenAI News
博客园 - 【当耐特】
博客园 - Franky
AWS News Blog
AWS News Blog
罗磊的独立博客
J
Java Code Geeks
Know Your Adversary
Know Your Adversary
A
Arctic Wolf
小众软件
小众软件
量子位
SecWiki News
SecWiki News
S
Security Affairs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog
N
News and Events Feed by Topic
Apple Machine Learning Research
Apple Machine Learning Research
H
Heimdal Security Blog
Google DeepMind News
Google DeepMind News
IT之家
IT之家

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 的流量大小 shell | centos 初始化 loki (二) 部署 loki (一) 简介 prometheus (六) Alertmanager prometheus (五) 记录规则与告警规则 prometheus (四) 黑盒监控 prometheus (三) 服务发现 prometheus (二) 静态配置 prometheus (一) 简介及部署 traefik (四) TraefikService 服务 traefik (三) Middleware 中间件 traefik (二) ingressRoute 路由 traefik (一) 简介、部署和配置 kubernetes | Gateway API 简介及部署 linux | dns 配置文件中 search 和 options ndots 详解 kubernetes | command args 和 dockerfile 中的 ENTRYPOINT CMD kubernetes | statefulset 控制器详解 docker | dockerfile 最佳实践 docker | dockerfile 指令详解 linux | kill 命令详解以及 linux 中的信号 troubleshooting | elasticsearch 安装插件报错 shell | if 条件判断 docker | 下载外网镜像的几种方式 python | 鬼谷子数学问题 steam挂刀教程 linux | history 命令的格式化输出 shell | 将本地镜像批量推送到 harbor windows | hosts 文件修复 kubernetes | configmap & secret kubernetes | RBAC 鉴权和 NetworkPolicy kubernetes | service & ingress kubernetes | 存储 kubernetes | 滚动升级和自动伸缩 kubernetes | 控制器 kubernetes | 日志 kubernetes | 调度 kubernetes | pod kubernetes | 杂记 linux | set 命令详解 ceph | openeuler 部署 ceph-v16 ceph | ceph-v16 离线安装解决方案 pxe 如何应对复杂的服务器硬件环境 python | 批量修改目录下文件名 《微习惯》 ceph | openeuler (aarch64) 部署 ceph-v16 troubleshooting | glibc 误升级后修复 pxe 安装配置大全 《人间失格》 跑步日常 [置顶] Hello, hugo! shell | 检索某 url 中所有文件的内容 shell | 不同执行方式的区别 shell | 开启 debug 模式 vscode | 常见问题 windows & linux 多网卡时设置默认路由以及添加静态路由 mysql (二) 主从复制原理 GTID 并行复制 mysql (一) 部署 mysql | 杂记 cicd | jenkins 部署 mall-swarm 项目 httpd 源码打包编译成 rpm 包 openssl 源码打包编译成 rpm 包 centos7 | 修改网卡名称 ceph | pool pg_num 配置 docker | 脚本方式批量导出/导入镜像 centos 密码尝试次数过多问题处理 centos7 | 升级内核至 5.10 CVE-1999-0526 ceph | centos7 部署 ceph-v12 python | 修改 pip 源 windows | autohotkey 常用脚本
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

支付宝