2017-12-19 60 views
2

多くのsudoコマンドを使用するスクリプトをPython 3.6で作成しています。このスクリプトは私のユーザとしてLinuxマシン上で動作します。このスクリプトは一種のレポートを作成し、多くのサーバーに対してsshを実行し、lsofのようなコマンドを実行しています。
私はsudoを使うときはいつでも、私のパスワードを与えるためにpythonを作る方法が必要です。明らかに初めてパスワードを入力し、スクリプトのメモリに保存することができます。 私は例えば、私はsudoコマンドを実行するPythonのサブプロセスを使用してきた:
pythonスクリプトを使ってsudoにパスワードを入力する方法

cmd = SSH + '-t ' + source + " ' " + SUDO + "-k " + LSOF + "-p " + pid + " ' " 
output = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True, universal_newlines=True)
(out,error) = output.communicate()

それは可能ですか?

制約:このスクリプトは、多くのサーバーへのsshを行いますので、
ルートキットは、sudoでスクリプトを実行する
許可されていませんが、オプションではありませんし、セキュリティ上の理由から、私はそうすることを許されていませんよ。
sudoersファイルで何も変更できません。

+0

STDINからパスワードを読み取る-Sスイッチを使用できます。 '$ echo | sudo -S '。しかし、私は別の良い方法があります。パスワードをソースコードに入れないでください。 –

+0

トピックをオフにします:しかし、Pythonのさまざまな文字列フォーマットオプションをチェックしてください。あなたのSSH文字列を組み立てるのに二重引用符を20回以上打ち込んでいます。 – jsbueno

答えて

1

私はあなたがそれを行うPythonの "pexpect"モジュールを使うことをお勧めします。 これは「期待」に基づいており、他のプログラムとのやりとりを自動化するために使用されます。 Python標準ライブラリの一部ではありませんが、独自のPython環境を作成する場合は、必ずしもrootをインストールする必要はありません。

例:

#import the pexpect module 
import pexpect 
# here you issue the command with "sudo" 
child = pexpect.spawn('sudo /usr/sbin/lsof') 
# it will prompt something like: "[sudo] password for <generic_user>:" 
# you "expect" to receive a string containing keyword "password" 
child.expect('password') 
# if it's found, send the password 
child.sendline('S3crEt.P4Ss') 
# read the output 
print(child.read()) 
# the end 

詳細はここで見つけることができます:

https://pexpect.readthedocs.io/en/stable/api/index.html

・ホープ、このことができます!

0

あなたはPythonスクリプトにパスワードsudoを与えたいので、新しいユーザーグループを作成してこのグループをスクリプトファイルに設定する方が良いと思います。あなたのスクリプトにはパスワードがもう一切必要ない(sudoの許可がある)。

注:(。。私の答えはUbuntu 14.04でテスト別のLinuxバージョンが同じである必要があります

rootユーザーとしてログインしている場合は、次のように入力して、いつでも新しいユーザーを作成することができます。

adduser <newuser> 

または

sudo adduser <newuser> 

新しいユーザーは、rootでコマンドを実行する能力を持っている必要がある場合には(管理者新しいユーザーにsudoへのアクセス権を与える必要があります。

visudoコマンドを使用すると、エディタに適切な設定ファイルが開きます。これがこれらの変更を行う最も安全な方法です。

visudo 

または

sudo visudo 

次のような行を検索します。この行の下

root ALL=(ALL:ALL) ALL 

、あなたはここを参照してくださいフォーマットをコピーし、のみ単語「ルート」を変更新しいユーザーをsudo特典として提供したい場合は、

root  ALL=(ALL:ALL) ALL 
<newuser> ALL=(ALL) NOPASSWD:ALL 

chownを使用して、Pythonスクリプトの所有権を変更します。

sudo chown <newuser>: <python script> 

その後、パスワードなしでsudoの権限でスクリプトを実行できます。

注:(sudoパスワードをソースコードに入れたいので、この方法をお勧めします。ただし、スクリプトには注意してください。それはより強力です...

0

あなたはParamikoライブラリを使ってそれを行うべきだと思います。 paramikoをインポートする前にインストールしてください。 Check this

以下はサンプルコードです。それを使用する前にそれをテストしてください。

$pip install paramiko 

import paramiko 
ssh_client = paramiko.SSHClient() 
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
pid = 12345 # Modify this per your requirement 
try: 
    ssh_client.connect('source',username='user',password='pwd') 
    stdin,stdout,stderr = ssh_client.exec_command('sudo -k lsof -p '+pid) 
    stdin.write('pwd\n') 
    stdin.flush() 
    result = stdout.read.splitlines() 
except paramiko.SSHException: 
    print('Connection Failed') 
    quit() 
関連する問題