Linux ansible

su root,su -, su - root的区别

前提:

  • su:切换用户;如果不指定用户,默认切到 root
  • -(也可以写成 -l / --login):代表 登录式切换

1. su root或直接写su

复制代码
su root
  • 只切换 UID/GID ,但是:保留原来用户的环境变量、PATH、当前工作目录
  • 不会加载 root 的 ~/.bashrc / .bash_profile
  • 提示符、环境还是上一个用户那套,很容易踩环境变量坑
  • 需要输入:root 的密码

示例:你是 weihuopr,su root,pwd 还在 /home/weihuopr

2. su -

等价:su - root

复制代码
su -
  • - = login shell
  • 切换身份 + 清空原有环境,加载目标用户完整登录环境
  • 切到 root 的家目录 /root,加载 /root/.bash_profile、.bashrc
  • 需要输入:root 的密码
  • 日常运维标准写法

3. su - root

和 su - 效果完全一样 ,只是显式写出目标用户 root;如果要切别的用户,就写 su - nginx

极简对比表

命令 是否登录 shell 当前目录 环境变量 密码
su root ❌ 不变(保留原来目录) 继承原用户 root 密码
su - ✅ 跳到 /root root 完整登录环境 root 密码
su - root ✅ 跳到 /root root 完整登录环境 root 密码

ansible -u weihuopr 10.243.230.136 -m shell -a 'fdisk -l' -k -K -S

第一个k: weihuopr这个用户的登录密码

第二个K: 后面是-S,表示su,输入root密码

-K 要输入什么密码,完全由提权方式(这里就是 -S / --become-method)决定:

  • 如果是 -s(--sudo):-K 要输入 weihuopr 的sudo密码
  • 如果是 -S(--su):-K 要输入目标用户(默认 root)的密码

第三个-S :旧参数,走 su 方式,同样废弃,改用 become

  • 底层:su root -c "cmd"
  • 校验:目标用户(默认 root)的密码

原来 -S = --su,等价于 --become-method=su

改成 -b 体系有两种写法:

① 保持原来行为(还是 su root,要 root 密码)

复制代码
ansible -u weihuopr 10.243.230.136 -m shell -a 'fdisk -l' -k -K -b --become-method=su
  • -k:输入 weihuopr 的 SSH 登录密码
  • -K:输入 root 的密码 (和之前 -S 的效果一模一样)

② 默认 become(默认是sudo,最常用)

如果换成 sudo 方式(不再是 su):

复制代码
ansible -u weihuopr 10.243.230.136 -m shell -a 'fdisk -l' -k -K -b
  • -k:输入 weihuopr 的 SSH 密码
  • -K:输入 weihuopr sudo密码
  • 如果这台机器配置了 sudo NOPASSWD,直接去掉 -K

对照速记

  • -b 只是开启提权开关;真正决定是 sudo /su,靠 --become-method

-b****:打开提权

  • 如果不写 --become-method → sudo
  • 如果不写 --become-user → root
  • -b 后面啥也不写的话,等价于:--become-method=sudo --become-user=root

格式规则:node01是别名,别名后面不能直接裸写 IP;IP 必须放在 ansible_host= 后面。

你现在第 2 行:

复制代码
# ❌ 错
node02 192.168.31.129 ansible_password="flyfly123"

Ansible 把 192.168.31.129 当成一个变量名,它不认,直接解析失败。

改成:

复制代码
# ✅ 正确
[web]
node02 ansible_host=192.168.31.129 ansible_password="flyfly123"
node01 ansible_host=192.168.31.128 ansible_user=fengliyang ansible_password="123456"

几种写法:

1.ip在hosts文件配置过

如果ansible.cfg指定了用户,可以改成

如果不写-u, 默认使用ansible.cfg里指定的remote_user

这时候默认是查询user2用户的whoami

2**.ip没在hosts文件配置**

相关推荐
垚垚学技术_聚焦云原生13 天前
Ansible Vault 安全实践:敏感密码、密钥加密存储方案
安全·elasticsearch·ansible
广目软件15 天前
HA分布式架构采集节点变更操作手册20261029
运维·服务器·ansible·zabbix·prometheus
Moshow郑锴16 天前
Ansible 批量部署 Node.js 服务:ZIP 直解与共享目录分发两种方案对比
node.js·ansible
垚垚学技术_聚焦云原生16 天前
Ansible Playbook 进阶:when 条件、loop 循环、handlers 触发器落地
linux·ansible·自动化运维·devops
Moshow郑锴16 天前
GCP MIG 重建后 Ansible 初始化实战:PowerShell + NSSM 挂载 Windows 服务
windows·ansible
承渊政道18 天前
新增一台服务器时还要重新装Nginx?Ansible只改hosts目标列表,同一份Playbook继续执行
运维·nginx·ansible·内网穿透·cpolar
Helix25020 天前
Ansible混合环境自动化:Windows与Linux统一配置管理实战
windows·自动化·ansible·playbook·配置管理·winrm·混合环境
垚垚学技术_聚焦云原生21 天前
Ansible 变量体系详解:主机变量、组变量、全局变量优先级实战
ansible·自动化运维·devops·变量优先级
I'mChloe1 个月前
不再逐台装Docker:我用Ansible Playbook批量统一服务器环境
服务器·docker·ansible