来自非库存节点的Anisble SCP文件

时间:2019-04-04 18:56:52

标签: ansible devops

我需要将文件从非库存远程计算机发送到Ansible的库存远程计算机。 scp还需要密码才能访问。有没有一种简单易行的方法来做到这一点?

例如: 我的库存

hosts:
  - node1
  - node2

存在文件的机器:

  - gw_machine

在node1上,我想:

scp user@gw_machine:/path/ .

我知道复制,获取和同步模块,但是它们似乎对我没有作用。我尝试编写一个期望脚本,但是由于gw_machine不在node1的known_hosts中,因此在我第一次连接时它会挂起。

我的期望任务:

  - name: Scp file
    shell: |
      set timeout -1
      spawn /usr/bin/scp user@gw_machine:/path_to_file/ .
      expect "password:"
      send "{{gw_passwd}}\n"
      expect EOF
      exit 0
    args:
      chdir: /tmp/
      executable: /usr/bin/expect

当gw_machine在node1的已知主机中时,以上方法起作用,但在不存在时挂起。我的机器上没有sshpass

1 个答案:

答案 0 :(得分:0)

您可以将shell任务与sshpass一起使用。 sshpass将传递scp需要的密码,例如:

sshpass -p "<the password here>" scp <username>@<host IP>:<path and file> .

编辑:

如果要继续执行现有任务,可以通过添加-oStrictHostKeyChecking=no来调整scp命令以将新主机自动添加到其known_hosts列表中:

例如:

[http_offline@greenhat-29 tmp]$ scp -oStrictHostKeyChecking=no /tmp/test1.out localhost:/tmp/test2.out
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
test1.out                                                                                                                                                                             100%    0     0.0KB/s   00:00    
[http_offline@greenhat-29 tmp]$