我需要将文件从非库存远程计算机发送到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
答案 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]$