Libs使用SSH工作

时间:2010-12-01 06:58:47

标签: python ssh sudo

通过SSH协助图书馆工作。主要要求是使用实用程序sudo进行正常操作。 我已经尝试过,我正在受苦:

  • paramiko - 根本不能sudo,尝试调用STDIN密码后,但是sudo写了然后输入:“No ttys present”
  • pxssh - mmmmmm,很慢,很慢,很尴尬
  • fabric - 只能在理想的世界中使用sudo,因为我需要与不同的用户合作以及需要发送密码的地方吗?

是否有使用sudo的普通库?

5 个答案:

答案 0 :(得分:0)

我认为您正在寻找fabric

答案 1 :(得分:0)

您可以将sudo配置为在没有'requiretty'设置的真实终端的情况下工作。来自sudoers手册:

  

如果设置,sudo将仅在用户登录到真实tty时运行。这将   不允许“rsh somehost sudo ls”之类的东西,因为rsh(1)没有   分配一个tty。   因为当没有tty存在时无法关闭回声,   某些站点可能希望设置此标志以防止用户输入可见   密码。默认情况下,此标志处于关闭状态。

这适用于paramiko。根据您在做什么,您还可以查看类似pexpect的内容。

答案 2 :(得分:0)

为什么不让Paramiko为你分配一个TTY,而不是强迫sudo无法工作?

Paramiko and Pseudo-tty Allocation

答案 3 :(得分:0)

起初我和pxssh有同样的问题:它非常慢! 我发现这是一种让它更快运行的方法:

#!/usr/bin/python

import pxssh
import getpass

try:
    s = pxssh.pxssh()
    s.PROMPT = "#"
    hostname = raw_input('hostname: ')
    username = raw_input('username: ')
    password = getpass.getpass('password: ')
    s.login(hostname, username, password, auto_prompt_reset=False)
    s.sendline('ls')   # run a command
    s.prompt()             # match the prompt
    print(s.before)        # print everything before the prompt.
    s.sendline('ls -l /tmp')   # run a command
    s.prompt()             # match the prompt
    print(s.before)        # print everything before the prompt.
    s.logout()
except pxssh.ExceptionPxssh as e:
    print("pxssh failed on login.")
    print(e)

s.PROMPT = "#"中的关键部分为auto_prompt_reset=Falses.login() 此方法要求您知道提示的模式(在我的情况下,它是“#”,我认为PROMPT属性可以设置为正则表达式。)

答案 4 :(得分:0)

我在pxssh上的登录速度也遇到了一些问题。我尝试使用上面引用的代码,但仍然只看到10秒以上才能登录。使用original_prompt参数为我修复了问题。您需要确保将original_prompt设置为您第一次进入计算机时所看到的内容,在我的情况下结束于'>'。

#!/usr/bin/env python

from pexpect import pxssh

host = 'hostname.domain'
user = 'username'
password = 'password'

terminal = pxssh.pxssh()
terminal.login(host, user, original_prompt='[>$]')