【发布时间】:2015-11-09 21:23:54
【问题描述】:
我正在尝试用 Ansible 模仿这个简洁的 scp 命令:
scp local_file user@remote_host:
上面会将local_file上传到remote_host/home/user。
Ansible 的 BIG 问题是它需要在dst 中提供绝对路径,因为我正在上传到@987654328,所以我无法提供@...
---
- hosts: remote_host
connection: paramiko
gather_facts: False
tasks:
- name: Uploading SSH Pub Key
copy:
src="../keys.d/ssh-keyfile.pub" dest="/"
这个剧本很高兴地失败并出现错误:
fatal: [remote_host] => failed to transfer file to syntax error (line 1 column 5)/source
有人知道任何合理的解决方法吗?也许可以启动本地命令(在执行 ansible-playbook 的主机上),在我的情况下是scp,并提供 Ansible 变量?
【问题讨论】:
-
$HOME 变量有一个直接的方法,但是,你试过只使用
dest="~/"吗?这对我有用 -
@MikeD 感谢您的提示,但您的建议不起作用,普通的
~也不起作用。就像我说的,我正在上传到router,而不是 linux 框,所以没有像大多数 bash-like shell 那样的便捷快捷方式,~指向用户的主目录。 -
您应该澄清问题中的路由器。查看router docs,您应该这样做:
ftp -n <<EOF open 10.20.1.1 user admin admin put ../keys.d/ssh-keyfile.pub EOF。然后你必须连接并做user ssh-keys import file=ssh-keyfile.pub -
@MikeD 我的问题不是关于路由器的具体品牌,因为这个特定的任务 ansible 会在 cisco 或任何其他设备上失败,你不能指定直接路径..我很完美请注意,我还有其他选择,例如您提到的
ftp,在这种情况下,我会编写一个简单的 bash 脚本,然后使用scp推送文件,因为我想要安全通道。然而问题是如何用 ansible 来做这件事,这很可惜,因为 ansible 在这个领域似乎远不完美。谢谢。
标签: ansible scp provisioning