2016-12-29 10 views
1

だから、これは私のコードです:https://github.com/trisimix/serialcontrol/blob/master/serialcontrol.pyパスワードをプレーンテキストとして保存しないでください。

import subprocess 
import os 
import stat 
dmi = subprocess.check_output('dmidecode', shell=True) 
#print(variable) 
#run program once as root then cron it as root 
try : 
    file = open("/var/log/serialcontrol/dmidecode.txt", "r") 
    file.close() 
except FileNotFoundError: 
    script = '/var/tmp/serialcontrol.bash' 
    with open(script, 'w') as file: 
     file.write("#!/bin/bash/\nif [ ! -d /var/log/serialcontrol/ ]\nthen\n\tmkdir /var/log/serialcontrol/\nfi"); 
    #st = os.stat(script) 

    #os.chmod(script, st.st_mode | stat.S_IEXEC) 

    subprocess.call(["bash", script]) 
    subprocess.call(["rm", script]) 
#with open('/var/log/serialcontrol/dmidecode.txt' , 'w') as file: 
#  file.write(dmi); 
file = open("/var/log/serialcontrol/dmidecode.txt" , "w"); 
dmi = str(dmi) 
dmi = dmi.replace('\\n', '\n') 
dmi = dmi.replace('\\t', '\t') 
file.write(dmi) 
file.close() 
script2 = '/var/log/serialcontrol/serialcontro1.bash' 
#with open(script2, 'w') as file: 
# file.write('#!/bin/bash\nrecipients="[email protected]"\nsubject="...Subject..."\necho -e "to: $recipients\nsubject: $subject\n"| (cat - &&uuencode /var/log/serialcontrol/dmidecode.txt) | ssmtp [email protected]') 
import smtplib 
sender = '[email protected]' 
receivers = '[email protected]' 
message = "\r\n".join([ 
    "From: [email protected]", 
    "To: [email protected]", 
    "Subject: SerialControl", 
    "", 
    dmi 
    ]) 
username = '[email protected]' 
password = '' 
server = smtplib.SMTP('smtp.gmail.com:587') 
server.ehlo() 
server.starttls() 
server.login(username,password) 
server.sendmail(sender, receivers, message) 
server.quit() 
#subprocess.call(["bash", script2]) 
#this sub is supposed to /n with actual /n's 
#subprocess.run(["sed -i 's/\\n/\n/g' /var/log/serialcontrol/dmidecode.txt"], shell=True) 
#except FileNotFoundError: 
#file = open('/var/tmp/serialcontrol.bash', 'w') 
#file.write("#!/bin/bash/\nif [ ! -d /var/log/serialcontrol/]\nthen\n\tmkdir /var/log/serialcontrol/\nfi"); 
#file.close() 
#st = os.stat("/var/tmp/serialcontrol.bash") 
#os.chmod("/var/tmp/serialcontrol.bash", st.st_mode | stat.S_IEXEC) 
#subprocess.call("/var/tmp/serialcontrol.bash") 

私はそれは本当に、本当に、本当に、本当に、本当に、悪いことを知っているが、パスワードのセグメントに私はこのスクリプトをcronでは前に、自分のパスワードを入力する必要があり、パスワードが取得平文として保存されています、どのように修正?

+0

キーリングは実行可能なオプションですか? – Marat

+0

サーバーコードはあなたのコントロールから外れていますか?サーバーが認証できる暗号化されたパスワードを送信できませんか? –

+0

** **参照:http://stackoverflow.com/questions/157938 – dreftymac

答えて

0

あなたが質問をbashでタグ付けしたので、私はあなたがLinuxまたはUnixライクなシステムを使用していると仮定します。

これは私がマシンパスワードと呼ぶものです。 cronで起動されたスクリプトから使用したい場合は、にディスクのどこかでアクセス可能でなければなりません。

正しい(以下悪い)方法があるに:

  • 使用することを使用のための専用のメールアカウント - ないあなた個人のメールアカウント(しかしarchmachine9あなたはすでにそれを行っているヒントです。 ...) - 理想的には、このアカウントでログインすることは不可能である必要があり(a single * `例えばパスワードフィールド)
  • がマシンにシステムアカウントを使用中 - ルートでも、あなたのメインのローカルアカウントでもない
  • ストアトン彼はそのシステムアカウントのホームディレクトリの下にあるファイルにパスワードを設定します。パスワードは/所有者のみ
  • のために読み書きする必要がありますが、それらのものを見つけることができない場合は、環境
  • からユーザ名、パスワード、および最終的には、サーバを抽出し、それらをファイルから読み込む
  • 代わりランチャーでスクリプトを埋め込みますそれはそのようにファイルから資格証明書を読み、実際のスクリプト(私のお気に入りオプション)を起動する前に、環境に入れ

、メールアカウントが異なるスクリプト上で共有されている場合でも、あなたは1つの中心点を持っていますパスワードを変更するには、システムアカウントにのみアクセスできるファイルに保存されているので、マシンの管理者(root)shそれを読むことができる。スクリプトを開発、保守、テストするためにそれを知る必要はありません。開発環境にテストメールアカウントを設定するだけです。

TL/DR:マシン上にパスワードをプレーンテキストとして保存する必要がありますスクリプトはcronで起動可能ですが、スクリプト自体には含まれません。

関連する問題