我的方案是我需要登录到远程计算机,然后对另一个帐户(如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()
答案 0 :(得分:2)
一种(不是很安全)的方法是输入密码。需要注意的是,使用paramiko连接到盒子的用户应该具有sudo权限。
例如:
supass = 'some_pass'
stdout, stdin, stderr = ssh.exec_command('echo %s | sudo -S anotheract' % supass)
同样,这不是一个非常安全的实现,但是可以快速完成工作。
答案 1 :(得分:-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。
答案 2 :(得分:-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")