【问题标题】:SSH into Remote machine and edit file as a root user using PythonSSH进入远程机器并使用Python以root用户身份编辑文件
【发布时间】:2018-02-04 17:09:56
【问题描述】:

我正在编写一个 Python 脚本,该脚本可以通过 SSH 连接到多个远程 CentOS 机器,并将“/etc/sysconfig/network-scripts/ifcfg-eth1”中的“ONBOOT”值从“yes”更改为“no”。 我可以使用 Paramiko 和我的用户凭据通过 SSH 连接到远程机器。 为了编辑“/etc/sysconfig/network-scripts/ifcfg-eth1”文件,我必须成为 sudo 用户,然后只有我可以编辑该文件。 我的脚本面临的问题是我无法以 root 用户身份直接登录 CentOS。我应该首先使用我的用户凭据登录,然后使用“sudo -s”和密码更改为 root。 有没有办法使用我的用户凭据 ssh 进入远程计算机并更改为 root 用户并编辑文件。?

【问题讨论】:

  • 你为什么不能在远程机器上给自己root权限?或者将您的 ssh 密钥添加到 root 的授权密钥中?
  • 不要重复之前的评论,但您应该修复它,以便您可以在需要时以 root 身份登录。如果您所做的只是一行一行地编辑,那么 bash 脚本可能会更简单。如果您最终打算做更复杂的事情,请警惕重新发明*。有许多配置管理工具(Salt、Ansible、Chef 等)运行良好。
  • 这篇文章正是我几周来一直在寻找的。​​span>

标签: python linux ssh paramiko


【解决方案1】:

首先使用 paramiko 的 ssh.connect 建立连接,然后

   import paramiko
   ssh = paramiko.SSHClient()
   ssh.connect("hostname", username = "username", password = "password")
   cmd = "echo {} | sudo -S {}".format("password", "touch /opt/giri")
   ssh.exec_command(cmd)

登录的用户是具有sudo权限的普通用户。所以首先脚本以“普通用户”身份登录,然后以 sudo 权限执行命令。

sudo 命令的-S 选项,使 sudo 从 stdinread 获取其 来自标准输入的密码,而不是使用 终端设备。

【讨论】: