【问题标题】:Libs for work with SSH用于 SSH 的库
【发布时间】:2017-01-25 02:48:10
【问题描述】:

建议图书馆使用 SSH。主要要求是使用实用程序 sudo 进行正常操作。 我已经尝试过了,我正在遭受什么:

  • paramiko - 根本无法使用 sudo,在调用 STDIN 密码后尝试服务,但 sudo 写道,然后输入:“没有 ttys”
  • pxssh - mmmmmm,非常慢,非常非常慢,尴尬
  • fabric - sudo 只能在理想的世界中使用,因为可以与不同的用户一起工作并且我需要在哪里发送密码?

是否有可以使用 sudo 的普通库?

【问题讨论】:

  • 你能稍微改一下你的问题吗? sudossh 是两个不同的东西。你在找什么?
  • 我只需要通过 SSH 连接到服务器并从特权帐户执行任何任务

标签: python ssh sudo


【解决方案1】:

与其强迫sudo 在没有tty 的情况下工作,为什么不让Paramiko 为你分配一个TTY?

Paramiko and Pseudo-tty Allocation

【讨论】:

    【解决方案2】:

    我想你正在寻找fabric

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 为什么不分配一个TTY呢?请参阅我的答案中的链接。
      • @Andrew Aylett:为了自动化,我只使用带有公钥身份验证的 SSH,非常严格的 sudoers User_Alias 和 NOPASSWD(为了避免脚本中出现明文密码)。在我永远不会输入密码的环境中要求 tty 分配是一种浪费。
      【解决方案4】:

      一开始我也遇到了同样的问题:它非常慢!
      这是我发现的一种让它运行得更快的方法:

      #!/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=False中的s.login()
      此方法要求您知道提示的模式(在我的例子中是“#”,我认为可以将 PROMPT 属性设置为正则表达式)。

      【讨论】:

        【解决方案5】:

        我在 pxssh 上的登录速度也有一些问题。我尝试使用上面引用的代码,但仍然需要 10 多秒才能登录。使用 original_prompt 参数为我解决了这个问题。您需要确保将 original_prompt 设置为您第一次 ssh 进入机器时看到的内容,在我的例子中,它以 '>' 结尾。

        #!/usr/bin/env python
        
        from pexpect import pxssh
        
        host = 'hostname.domain'
        user = 'username'
        password = 'password'
        
        terminal = pxssh.pxssh()
        terminal.login(host, user, original_prompt='[>$]')
        

        【讨论】:

          猜你喜欢
          • 2010-12-28
          • 2011-07-22
          • 2010-11-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-02
          • 1970-01-01
          相关资源
          最近更新 更多