SSH和sudo over伪tty终端

时间:2016-07-22 02:26:19

标签: linux ssh ansible

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

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

这最终必须转到我的ansible脚本。

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

任何提示或替代选项?

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

干杯!

2 个答案:

答案 0 :(得分:0)

根据您使用的传输方式,您可以使用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

答案 1 :(得分:0)

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

  

-c, - command = COMMAND
      使用-c

将单个COMMAND传递给shell

但是,您要使用sudo进行身份验证,默认情况下已经执行此操作;你可以完全从命令中删除su

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

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