我正在努力克服我们环境中的一些限制,为无密码的ssh密钥编写授权的SSH文件。
我要求将ssh作为目标系统执行,然后运行“sudo su - ,然后使用密钥更新服务帐户authorized_keys”
这最终必须转到我的ansible脚本。
我正在使用“ssh -t user @ target”sudo su - service-user“ - 它实际上成功地让我进入了服务用户的shell。但是我无法找到传递文件的方法用上面的方法修改命令。
任何提示或替代选项?
注意:我需要使用“ssh -t”选项,因为目标系统上没有设置requiretty。
干杯!
答案 0 :(得分:0)
根据您使用的传输方式,您可以使用ssh_args。
OpenSSH是操作系统上Ansible的默认连接类型,足以支持ControlPersist。 (这基本上意味着除Enterprise Linux 6或更早版本之外的所有操作系统。)
然后你可以在ansible.cfg
:
ssh_args = -t -t
这会强制ansible以手动方式连接。
然后在您的剧本中或与您需要的任务一起指定become
和become_user
- name: Some task
debug: msg="this is a test"
become: true
become_user: someuser
答案 1 :(得分:0)
su
有一个选项-c
,允许您传递一个命令来执行而不是启动一个新shell。
-c, - command = COMMAND
将单个COMMAND传递给shell
使用-c
但是,您要使用sudo
进行身份验证,默认情况下已经执行此操作;你可以完全从命令中删除su
:
ssh -t user@target "sudo -u service-user <your-command>"
更进一步,你注意到你正在计划将它放入Ansible剧本中。如果是这样,你可能不应该花费太多时间尝试手动执行此操作 - Ansible将远程处理运行命令(毕竟这是其主要功能之一),并且a module用于修改authorized_keys
文件。