Python秘密鍵なしsshリモートログイン実行コマンドandローカル実行shellコマンド
3817 ワード
pythonリモート実行
python paramikoモジュールの応用
環境
メソッドボディ
ヒント:ssh秘密鍵なしでログインするモードを採用したほうがいいです.できるだけ明文パスワードが現れないようにしてください.
ネイティブ実行shellスクリプト
pythonにはcommandsなどのローカルshellスクリプトを呼び出す方法がたくさんありますが、現在はsubprocessを使用してローカルshellスクリプトの呼び出しを行うことが推奨されています.このモジュールの方法は多いです.
python paramikoモジュールの応用
環境
# yum install python-dev
# yum install python-devel
# pip install pycrypto
# pip install paramiko
# pip install ssh
メソッドボディ
import paramiko
def DiskCheck(ip):
try:
# sshclient
ssh = paramiko.SSHClient()
# host_allow , connect
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# RSA , ,password , password
# pkey = paramiko.RSAKey.from_private_key_file('/home/super/.ssh/id_rsa', password='12345')
pkey = paramiko.RSAKey.from_private_key_file('/home/ptop/topicjie/scripts/keys/id_rsa')
#
ssh.connect(hostname=ip,
port=22,
username='ptop',
pkey=pkey)
#
stdin, stdout, stderr = ssh.exec_command("for i in $(df -h|grep data|awk '{print $6}'); do touch $i/test.txt; done; df -h|grep data")
# stdout , stderr
print(stdout.read().decode())
print(stderr.read())
#
ssh.close()
ヒント:ssh秘密鍵なしでログインするモードを採用したほうがいいです.できるだけ明文パスワードが現れないようにしてください.
ネイティブ実行shellスクリプト
pythonにはcommandsなどのローカルshellスクリプトを呼び出す方法がたくさんありますが、現在はsubprocessを使用してローカルshellスクリプトの呼び出しを行うことが推奨されています.このモジュールの方法は多いです.
import shlex
import subprocess
def execute_command(cmdstring, cwd=None, timeout=None, shell=False):
if shell:
cmdstring_list = cmdstring
else:
cmdstring_list = shlex.split(cmdstring)
if timeout:
end_time = datetime.datetime.now() + datetime.timedelta(seconds=timeout)
# , ;
sub = subprocess.Popen(cmdstring_list, cwd=cwd, stdin=subprocess.PIPE,shell=shell,bufsize=4096)
#subprocess.poll() : , , , subprocess.returncode
while sub.poll() is None:
time.sleep(0.1)
if timeout:
if end_time <= datetime.datetime.now():
raise Exception("Timeout:%s"%cmdstring)
return str(sub.returncode)
#
p=execute_command("hive -f "+path)