【问题标题】:Execute remote commands as root using Python and paramiko使用 Python 和 paramiko 以 root 身份执行远程命令
【发布时间】:2014-01-07 19:46:48
【问题描述】:

目前我正在开发一个 Python 脚本来运行嵌入 shell 脚本,操作系统包含 rootnormal_user

问题是,当我尝试从 normal_user 切换到 root 时,使用一行中的单个命令。

我只需要修改代码,而不是像 visudo 这样的代码来实现这一点,并且只使用 su 而不给 normal_user 任何编码之外的权利。

我怎样才能做到这一点?

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('172.16.x.x', username='my_name', password='my_password')

***stdin, stdout, stderr = ssh.exec_command('switch to root user && execute a commands as root')***


stdin.flush()
print stdout.readlines()
ssh.close()

【问题讨论】:

    标签: python linux bash command-line


    【解决方案1】:

    假设操作系统环境已安装sudo 命令并且normal_user 被允许sudo 无需密码即可root:

     stdin, stdout, stderr = ssh.exec_command('sudo -i -H -- echo $USER ; echo $USER')
    

    选项-i模拟器root登录(准备.profile等环境变量),选项-H设置$HOME目录和root一样。根据您的用例,这些可能需要也可能不需要。

    echo $USER 示例表明您正在以 root 身份执行该命令(它应该返回 $USER = root)。

    作为一项安全措施,您可以将normal_user 设置为仅当用户使用正确的 SSH 密钥登录时才具有 sudo 权限。

    http://www.evans.io/posts/ssh-agent-for-sudo-authentication/(复杂)

    【讨论】:

    • 我的建议是在这种情况下安装 sudo。因为如果你有 root 访问权限,你应该能够安装任何你想要的软件。我不确定 su 是否具有以 root 身份执行命令的非交互式方式,但我上次使用它是很久以前的事了,因为 sudo 现在几乎无处不在。
    • 非常感谢 Mikko 的热心帮助,公司的政策是不给 Normal_user sudo 我真的不知道该怎么办。
    • 如果 normal_user 没有 su/sudo root 访问权限并且您以 normal_use 身份登录,您的业务案例是不可能的。抱歉,我无法帮助您解决组织内的社会问题 :)
    猜你喜欢
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    相关资源
    最近更新 更多