You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ansible中通过Jumpbox先切换Root再登录远程服务器?

通过Ansible实现经堡垒机切换Root后访问远程服务器

你之前的ProxyCommand配置直接用普通用户走堡垒机,但没法在堡垒机上切换Root再连接远程服务器。要匹配手动操作的流程,需要调整ProxyCommand的逻辑,让它在堡垒机上先切换到Root身份,再发起对远程服务器的连接。

核心配置方案

在远程服务器的Ansible变量配置(如host_vars/[远程服务器名].yml或group_vars/[组名].yml)中,修改ansible_ssh_common_args:

ansible_ssh_common_args: '-o ProxyCommand="ssh -q user@jumpbox su - root -c '\''ssh -W %h:%p root@%h'\''"'

配置说明

  • ssh -q user@jumpbox:以普通用户user静默登录堡垒机
  • su - root -c '...':切换到Root用户,并执行后续的ssh通道转发命令
  • ssh -W %h:%p root@%h:以Root身份从堡垒机建立到远程服务器的标准输入输出通道(-W参数实现代理转发)

密码处理(两种方式)

方式1:免密登录(推荐)

为避免手动输入密码,建议配置两层免密:

  1. 本地机器生成密钥对,将公钥添加到堡垒机user用户的~/.ssh/authorized_keys,实现本地免密登录堡垒机普通用户
  2. 在堡垒机上以Root身份生成密钥对,将公钥添加到远程服务器Root用户的~/.ssh/authorized_keys,实现堡垒机Root免密登录远程服务器
  3. (可选)配置堡垒机user免密su到Root:修改/etc/pam.d/su或在sudoers中添加对应规则

方式2:明文密码(仅测试用,不推荐)

如果必须使用密码,可借助sshpass自动输入,配置如下:

ansible_ssh_common_args: '-o ProxyCommand="sshpass -p [堡垒机Root密码] ssh -q user@jumpbox su - root -c '\''sshpass -p [远程服务器Root密码] ssh -W %h:%p root@%h'\''"'

替代方案:用sudo代替su

如果堡垒机禁止直接su到Root,但允许普通用户使用sudo,可将配置改为:

ansible_ssh_common_args: '-o ProxyCommand="ssh -q user@jumpbox sudo -i ssh -W %h:%p root@%h"'

同时需在堡垒机的sudoers文件中添加规则,允许user免密执行ssh:

user ALL=(ALL) NOPASSWD: /usr/bin/ssh

测试验证

执行以下命令测试连接是否正常:

ansible [远程服务器名] -m ping

内容的提问来源于stack exchange,提问作者Muneeb K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 20:20:28