3

我的场景是我需要登录到远程机器,然后对另一个帐户(如(sudo su anotheract))执行 sudo,然后运行其他所需的命令。

但我能够使用以下脚本成功连接到远程机器。但是脚本挂在我正在执行 sudo 命令的行中(sudo su anotheract

您能帮我找到此代码的修复程序吗?

import paramiko

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(
    paramiko.AutoAddPolicy())

ssh.connect(hostname='XX.XXX.XX.XX',port=22, username='myname',password='XXXXX')

ssh.exec_command=("sudo su anotheract")

stdout,stdin,stderr=ssh.exec_command("java -jar /usr/share/XXX/LogR.jar")

print stdout.readlines()
4

3 回答 3

2

一种(不是很安全)的方法是输入密码。需要注意的是,您用来使用 paramiko 连接到盒子的用户应该具有 sudo 权限。

例如:

supass = 'some_pass'

stdout, stdin, stderr = ssh.exec_command('echo %s | sudo -S anotheract' % supass)

同样,这不是一个非常安全的实现,但可以很快完成工作。

于 2012-08-10T22:55:34.073 回答
-1
import pxssh
ssh = pxssh.pxssh()
ssh.login('host', 'user', 'password')
ssh.sendline("sudo su anotheract")
ssh.prompt('yourrootpassword')

在大多数 linux 系统上的 paramiko 中,你不能执行 sudo 命令,因为 sudo 期望来自 tty 的命令,然后它不会引发异常,但是你可以尝试方法 invokeshell,但我多年前使用 paramiko,我不记得它出了什么问题。如果你想在 shell 上发送各种命令,你可以使用 pxssh。

于 2012-08-03T10:46:23.167 回答
-2

它可以挂起,因为sudo等待密码。尝试将NOPASSWD:语句添加到/etc/sudoers.

user    ALL = NOPASSWD: /bin/true

同样不可能更改用户使用su,然后在完成后继续做某事su。完成su后,您将回到原始用户的原始 shell。

因此,您需要使用以下命令运行所有命令sudo

stdout,stdin,stderr = ssh.exec_command=("sudo -u anotheract java -jar /usr/share/XXX/LogR.jar")
于 2012-08-03T09:39:52.267 回答