使用 Paramiko 将文件从本地复制到远程仅根文件夹 (/usr/local/bin)?

问题描述 投票:0回答:2

我需要将文件从本地复制到远程

/usr/local/bin
。我已经在使用
paramiko
进行其他一些复制操作。

我在网上看到了一些关于如何避免权限错误的解决方案:

所有这些解决方案:

  • 更改目录的所有者
  • 将用户添加到目录的组中
  • 创建新组并更改目录上的组
  • 更换主人
  • 更改所有者、组或公共的读/写权限。

/user/local/bin
一起工作时感觉不舒服。

我还可以选择将文件复制到

~/file
,稍后使用
ansible
脚本(无论如何都在远程执行)移动它,但分割复制过程也感觉不对。

直接登录

sudo
是可能的,因为我可以启用远程root登录,但这听起来像是一个安全问题。

linux ansible file-permissions paramiko
2个回答
1
投票

您需要使用 root 登录才能访问需要 root 访问权限的文件夹。

有关此主题的一般讨论(以及为什么直接 root 登录并不是普遍认为的安全问题),请参阅
允许使用 SSH 以 root 身份在 Linux 上自动执行命令


如果您的服务器不允许直接 root 登录(并且您确实尝试过这样做),则必须找到一些解决方法。无论如何,Paramiko 不会(无法)帮助您绕过服务器的安全机制。

一些选项:

  • 将文件上传到您也有写入权限的文件夹,然后自动执行 shell 命令(通过
    sudo
    /
    su
    )将文件复制到最终的仅 root 目标。
  • 通过
    sudo
    /
    su
    运行 Paramiko SFTP。您必须实现
    SFTPClient.from_transport
    的替代方案,它将调用类似
    chan.exec_command('sudo su -c /bin/sftp-server')
    的内容而不是
    chan.invoke_subsystem("sftp")

0
投票

简而言之:

- 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 权限升级

© www.soinside.com 2019 - 2024. All rights reserved.