【问题标题】:SSH and sudo over a pseudo-tty terminal通过伪 tty 终端执行 SSH 和 sudo
【发布时间】:2016-07-23 03:41:04
【问题描述】:

我正在尝试克服我们环境中的一些限制,为无密码 ssh 密钥编写授权 SSH 文件。

我需要对目标系统执行 ssh,然后运行“sudo su - ,然后使用密钥更新服务帐户 authorized_keys”

这最终必须进入我的 ansible 脚本。

我正在使用 "ssh -t user@target "sudo su - service-user" - 这实际上成功地让我进入了服务用户的外壳。但我无法找到传递文件的方法用上面的修改命令。

任何提示或替代选项?

注意:我需要使用“ssh -t”选项,因为目标系统上没有设置requiretty。

干杯!

【问题讨论】:

  • 这个问题在Server Fault上可能会得到更好的回应。
  • 这句话“我无法用上面的方法来传递文件修改命令。”这句话难以理解。
  • 嗯,也许我会为那些需要它的人改写-“有人可以帮我确定对目标服务器执行 ssh 并执行 sudo su 并写入文件的最佳方法”

标签: linux ssh ansible


【解决方案1】:

根据您使用的传输方式,您可以使用ssh_args

OpenSSH 是 Ansible 在新到足以支持 ControlPersist 的操作系统上的默认连接类型。 (这意味着除了 Enterprise Linux 6 或更早版本之外的所有操作系统。

然后你可以在你的ansible.cfg中做这样的事情:

ssh_args = -t -t 

这将强制 ansible 以与手动相同的方式连接。

然后在您的剧本中或与您需要的任务一起指定becomebecome_user

- name: Some task
  debug: msg="this is a test"
  become: true
  become_user: someuser

【讨论】:

  • 好吧,手动命令本身不起作用。我试过了。前任。 "ssh -t user@target "sudo su - 服务用户;触摸测试”。我相信这是在 psuedo-tty 中生成 shell 的方式。
  • 你试过多个-t。来自手册页:“多个 -t 选项强制分配 tty,即使 ssh 没有本地 tty”
【解决方案2】:

su 有一个选项 -c,它允许您传递要执行的命令,而不是启动新的 shell。

-c, --command=命令
使用 -c

将单个命令传递给 shell

但是,您正在使用sudo 进行身份验证,默认情况下它已经这样做了;您可以完全从命令中删除su

ssh -t user@target "sudo -u service-user <your-command>"

为了更进一步,您注意到您计划将其放入 Ansible 剧本中。如果是这样,您可能不应该花太多时间尝试手动执行此操作 - Ansible 将远程处理正在运行的命令(毕竟这是它的主要功能之一),并且有 a module 用于修改 authorized_keys 文件。

【讨论】:

    猜你喜欢
    • 2015-06-26
    • 2021-08-20
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    相关资源
    最近更新 更多