使用 Ansible 进行 SSH 代理转发

2024-03-29

我正在使用 Ansible 1.5.3 和 Git 以及 ssh 代理转发(https://help.github.com/articles/using-ssh-agent-forwarding https://help.github.com/articles/using-ssh-agent-forwarding)。我可以登录到我使用 Ansible 管理的服务器并测试我与 git 的连接是否配置正确:

ubuntu@test:~$ ssh -T [email protected] /cdn-cgi/l/email-protection
Hi gituser! You've successfully authenticated, but GitHub does not provide shell access.

我还可以使用此帐户克隆和更新我的一个存储库,这样我的 git 配置看起来不错,并且当我直接通过 ssh 登录到我的服务器时使用 ssh 转发。

问题:当我尝试使用 Ansible 命令模块进行上面所示的相同测试时。它失败并显示“权限被拒绝”。 Ansible 输出的一部分(带有详细日志记录)如下所示:

failed: [xxx.xxxxx.com] => {"changed": true, "cmd": ["ssh", "-T", "[email protected] /cdn-cgi/l/email-protection"], "delta": "0:00:00.585481", "end": "2014-06-09 14:11:37.410907", "rc": 255, "start": "2014-06-09 14:11:36.825426"}
stderr: Permission denied (publickey).

这是运行此命令的简单剧本:

- hosts: webservers
  sudo: yes
  remote_user: ubuntu

  tasks:

  - name: Test that git ssh connection is working.
    command: ssh -T [email protected] /cdn-cgi/l/email-protection

问题:为什么当我通过 ssh 手动登录并运行命令时一切正常,但当通过 Ansible 以同一用户身份运行相同命令时却失败?

如果没有人比我更胜一筹,我会尽快发布答案。尽管我使用 git 来演示该问题,但任何依赖 ssh 代理转发的模块都可能会出现该问题。它不是 Ansible 特有的,但我怀疑很多人都会在这种情况下首先遇到这个问题。


通过从剧本中删除这一行可以解决该问题:

sudo: yes

当在远程主机上运行 sudo 时,登录期间通过 ssh 设置的环境变量不再可用。特别是,SSH_AUTH_SOCK(“标识用于与代理通信的 UNIX 域套接字的路径”)不再可见,因此 ssh 代理转发不起作用。

不需要时避免使用 sudo 是解决该问题的一种方法。另一种方法是通过创建 sudoers 文件来确保 SSH_AUTH_SOCK 在 sudo 会话期间保留下来:

/etc/sudoers:

     Defaults    env_keep += "SSH_AUTH_SOCK"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Ansible 进行 SSH 代理转发 的相关文章

随机推荐

  • 批量插入 mysql - 我可以使用忽略子句吗?有限制吗?批量插入的记录?

    我有一堆数据想要插入 我决定对 mysql 使用批量插入 插入朋友 请求者 好友 值 value1 value2 value2 value1 value3 value4 value4 value3 我想了解以下信息 1 我可以使用忽略吗 例
  • Json允许错误

    这个错误在我们的 MVC 应用程序中随机出现 有时做同样的事情不会 有时却会 有谁知道这是否与任何可以简单解决的问题有关 或者这是否是你们很多人都见过的常见现象 System InvalidOperationException This r
  • 注册 COM 互操作

    当选中构建属性中的 Register for COM Interop 选项时 出现错误 无法注册程序集访问 被拒绝 取消选中该选项时 项目构建时不会出现任何错误 但我的要求是注册 COM 对象 因为我需要在 VB 中使用相同的对象 谁能帮我
  • 与 WPF 和数据绑定一起使用的简单 CRUD

    我是用于 Windows 应用程序开发的 WPF 新手 只是想先将其介绍一下 我正在使用 Visual Studio 2010 和 NET Framework 4 0 我正在开发一个相当简单的管理工具 为了简单起见 假设我正在处理员工数据
  • 全屏嵌入 Bing 地图

    有人知道是否可以全屏嵌入 bing 地图吗 这样地图就可以始终填充背景并简单地在顶部覆盖一些元素 我似乎无法用 100 iframe 实现这一点 而且 bing 的帮助也没有那么有帮助 谢谢 如果我没理解错的话 你想要实现让地图填满整个屏幕
  • C11 结构继承与匿名结构

    I saw this way https stackoverflow com a 14523823 108802实施某种struct匿名继承struct在C11中 想尝试一下 这是我所拥有的 struct struct a int aa s
  • R - 查找行中的所有重复项并替换

    我有一个大数据框 正在尝试查找一行中的重复元素 然后用空字符串替换所有重复值 X1 X2 X3 X4 X5 x 1 2 3 3 4 y 1 1 2 3 4 应该成为 X1 X2 X3 X4 X5 x 1 2 4 y 2 3 4 我可以在单个
  • Cython:将扩展类型序列作为另一个扩展类型的属性,可以访问 cdef 方法

    假设我定义了以下 Cython 类 cdef class Kernel cdef readonly double a def init self double a self a a cdef public double GetValue s
  • JDBI中如何动态绑定表名

    我尝试使用 SELECT COUNT FROM TableName 在 JDBI 中我使用了 bind Tablename MyTable 结果始终在单引号内 SELECT COUNT FROM MyTable 有没有正确的方法来参数化类似
  • 如何通信两个独立的python进程?

    我有两个 python 程序 我想对它们进行通信 它们都是系统服务 都不是由父进程 fork 的 有没有什么方法可以在不使用套接字的情况下做到这一点 例如 通过创建一些队列 gt 序列化它 gt 由其他进程反序列化并执行通信 或者写入执行通
  • Servlet 在某些点击或时间后停止在 Tomcat 服务器上工作

    我的一些 servlet 遇到了一个非常奇怪的问题 下面是我的配置 文件夹 A 在 Tomcat 目录中部署了 X 个 servlet 文件夹 B 在 Tomcat 目录中部署了 Y 个 servlet 经过一定时间或点击文件夹 B 中的任
  • GCC预处理,内置和命令行是做什么用的?

    我很好奇 GCC 预处理步骤的输出 更准确地说 以下两行的目的是什么 1
  • TFIDF 计算混淆

    我在网上找到了以下计算TFIDF的代码 https github com timtrueman tf idf blob master tf idf py 我在函数 def idf word documentList 中添加了 1 这样我就不
  • 最长已排序子序列的长度

    我的未排序数组是 string a new string 10 22 9 33 21 50 41 60 80 在这个数组中 10 22 33 50 60 80按升序排列 所以输出必须是6 一般来说 我想要由数组元素组成并从第一个元素开始的升
  • 将列表绑定到数据源

    我希望能够将列表绑定到列表框数据源 并且当修改列表时 列表框的 UI 会自动更新 Winform 不是 ASP 这是一个示例 private List
  • 应该在代码中的什么位置保存不变的数据?

    我已经根据数据库中的表定义了模型 现在有一些模型的数据几乎没有变化 例如 电子商务网站销售的产品类别 产品发货城市等 这些不会经常更改 因此为了避免影响数据库 目前将它们保存为静态变量 问题是这些静态变量应该位于代码中的哪个位置 目前 在
  • 在 F# 中,如何生成 Func 类型的表达式?

    我正在使用需要 Func 类型值的 api 具体来说 我想打电话给ModelMetadataProviders Current GetMetadataForType http msdn microsoft com en us library
  • MyBatis 与 Guava 多重映射

    我想用番石榴多重地图 https google github io guava releases snapshot api docs com google common collect Multimap html as a 结果图 http
  • 如何从 django 中删除模型?

    在 Django 中 如何删除已同步到数据库中的模型 例如 在 Django 教程页面中有以下代码 from django db import models class Poll models Model question models C
  • 使用 Ansible 进行 SSH 代理转发

    我正在使用 Ansible 1 5 3 和 Git 以及 ssh 代理转发 https help github com articles using ssh agent forwarding https help github com ar