/ SSHで作業するための/ Lib - python、ssh、sudo

SSHで動作するライブラリ - python、ssh、sudo

SSHで作業するようにライブラリに助言する。主な要件は、ユーティリティsudoを使用した通常の操作です。 私はすでに試してみたし、私が苦しんでいるもの:

  • paramiko - STDINパスワードでサービスを提供するための呼び出しの後に試して、まったくsudoすることはできませんが、sudoはそれから次のように入力します。
  • pxssh - mmmmmm、非常に遅い、非常に非常に遅い、ぎこちない
  • ファブリック - さまざまなユーザーと仕事をするためにあり、パスワードを送信する必要がある場合に限り、理想的な世界でしか使用できないのですか。

sudoで動作する普通のライブラリはありますか、それともありませんか?

回答:

回答№1は0

力ではなく sudo ttyなしで作業するには、ParamikoにあなたにTTYを割り当てさせてはどうでしょうか。

パラミコと疑似端末の割り当て


回答№2の場合は0

私はあなたが探していると思う ファブリック.


回答№3の場合は0

あなたは "requiretty"設定で実際の端末なしで動作するようにsudoを設定することができます。 sudoersのマニュアルから:

設定されていると、sudoはユーザーがいるときだけ実行されます。本物の端末にログインしています。この意志 rsh(1)はしていないので、 "rsh somehost sudo ls"のようなことはできません。 ttyを割り当てます。 ttyが存在しない場合はエコーをオフにすることはできませんので、 一部のサイトでは、このフラグを設定してユーザーが表示されないようにします。 パスワード。このフラグはデフォルトではオフです。

これは私にとってパラミコと一緒に働きます。 o何をしているのかにもよりますが、 見通し.


回答№4の場合は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属性を正規表現に設定できると思います)。


回答№5の場合は0

私はまたログイン速度の問題をいくつか抱えて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="[>$]")