我需要将文件从本地复制到远程
/usr/local/bin
。我已经在使用 paramiko
进行其他一些复制操作。
我在网上看到了一些关于如何避免权限错误的解决方案:
所有这些解决方案:
- 更改目录的所有者
- 将用户添加到目录的组中
- 创建新组并更改目录上的组
- 更换主人
- 更改所有者、组或公共的读/写权限。
与
/user/local/bin
一起工作时感觉不舒服。
我还可以选择将文件复制到
~/file
,稍后使用 ansible
脚本(无论如何都在远程执行)移动它,但分割复制过程也感觉不对。
直接登录
sudo
是可能的,因为我可以启用远程root登录,但这听起来像是一个安全问题。
您需要使用 root 登录才能访问需要 root 访问权限的文件夹。
有关此主题的一般讨论(以及为什么直接 root 登录并不是普遍认为的安全问题),请参阅
允许使用 SSH 以 root 身份在 Linux 上自动执行命令
如果您的服务器不允许直接 root 登录(并且您确实尝试过这样做),则必须找到一些解决方法。无论如何,Paramiko 不会(无法)帮助您绕过服务器的安全机制。
一些选项:
sudo
/su
)将文件复制到最终的仅 root 目标。sudo
/su
运行 Paramiko SFTP。您必须实现 SFTPClient.from_transport
的替代方案,它将调用类似 chan.exec_command('sudo su -c /bin/sftp-server')
的内容而不是 chan.invoke_subsystem("sftp")
。简而言之:
- name: Copy my file to root owned directory
ansible.builtin.copy:
src: /path/to/local-file
dest: /usr/local/bin
owner: root
group: root
mode: 0750
become: true
或者如果文件已在您的遥控器上
- name: Copy my file to root owned directory
ansible.builtin.copy:
remote_src: true
src: /path/to/remote-file
dest: /usr/local/bin
owner: root
group: root
mode: 0750
become: true
注意:用于连接到远程目标的用户必须拥有完整的 sudo 权限。请参阅 Ansible 权限升级