次のエディターは、Python を使用してリモートサーバーに接続し、paramiko を使用してコマンドを実行する方法に関する記事を提供します。編集者はこれがとても良いと思ったので、参考として共有します。エディターに従って見てみましょう。Python の paramiko モジュールは、リモート サーバーへの SSH 接続を実装するために使用されるライブラリで、接続時にコマンドの実行やファイルのアップロードに使用できます。
1. 接続オブジェクトを取得します接続するときは、次のコードを使用できます:
def connect(host): 'this is use the paramiko connect the host,return conn' ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # ssh.connect(host,username='root',allow_agent=True,look_for_keys=True) ssh.connect(host,username='root',password='root',allow_agent=True) return ssh except: return None
最初のステップは、SSHClient オブジェクトを作成し、次に know_host ファイルにないマシンへの接続を許可するように ssh クライアントを設定し、サーバーへの接続を試行することです。サーバーに接続するときは、2 つの方法を使用できます。 : 1 つの方法は、シークレットを使用することです。キー メソッド、つまりパラメータ look_for_keys は、検索するパスワードを設定するために使用されます。または、パスワード メソッドを直接使用することもできます。つまり、パラメータ パスワードが直接使用され、最終的には接続されたオブジェクトを返します。
2. set コマンドを取得します次のコードに示すように、paramiko 接続を確立した後、実行する必要があるコマンドを取得する必要があります。 args ともう 1 つは outpath です。 args はコマンドのパラメータを表し、 outpath は /usr/bin/ls -l などの実行可能ファイルのパスを表します。このうち、outpath は /usr/bin/ls で、パラメータは -l
で、主にコマンドを結合し、別々のパラメータをコマンドの一部として組み立てる場合に使用されます。
def command(args,outpath):
'this is get the command the args to return the command'
cmd = '%s %s' % (outpath,args)
return cmd
この関数では、渡されるパラメータは接続オブジェクト conn です。実行する必要のあるコマンド cmd を実行し、最後に実行結果 (stdout.read()) を取得し、最後に結果を返します
4. ファイルをアップロードします
def exec_commands(conn,cmd):
'this is use the conn to excute the cmd and return the results of excute the command'
stdin,stdout,stderr = conn.exec_command(cmd)
results=stdout.read()
return results
この関数の主なパラメータは、1 つは接続オブジェクト conn、もう 1 つはアップロードされたファイルの名前、およびアップロード後のファイルの名前です。ファイル名にはパスが含まれます。
主な方法は、sftp オブジェクトを開き、put メソッドを使用してファイルをアップロードし、最後に sftp 接続を閉じ、最後にアップロードされたファイル名のフルパスを返すことです
def copy_moddule(conn,inpath,outpath):
'this is copy the module to the remote server'
ftp = conn.open_sftp()
ftp.put(inpath,outpath)
ftp.close()
return outpath
まず、サーバーに接続し、接続が失敗した場合は、接続オブジェクトを取得します。ホスト名と、接続が成功しなかったことを示す None。 接続が成功した場合は、ファイルが実行できるようにファイルの実行権限を変更し、最後に実行されたコマンドを取得します。実行すると結果が得られ、結果はjson形式で返されるので、結果は綺麗なjson形式で得られ、最後にホスト名と一緒に返されます
テスト コードは次のとおりです:
def excutor(host,outpath,args): conn = connect(host) if not conn: return [host,None] exec_commands(conn,'chmod +x %s' % outpath) cmd =command(args,outpath) result = exec_commands(conn,cmd) print '%r' % result result = json.loads(result) return [host,result]
最初のステップではコマンドの実行をテストし、2 番目のステップではアップロードされたファイルをテストし、3 番目のステップではアップロードされたファイルを変更する権限をテストします。 完全なコードは次のとおりです:
if __name__ == '__main__': print json.dumps(excutor('192.168.1.165','ls',' -l'),indent=4,sort_keys=True) print copy_module(connect('192.168.1.165'),'kel.txt','/root/kel.1.txt') exec_commands(connect('192.168.1.165'),'chmod +x %s' % '/root/kel.1.txt')
#!/usr/bin/env python import json import paramiko def connect(host): 'this is use the paramiko connect the host,return conn' ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # ssh.connect(host,username='root',allow_agent=True,look_for_keys=True) ssh.connect(host,username='root',password='root',allow_agent=True) return ssh except: return None def command(args,outpath): 'this is get the command the args to return the command' cmd = '%s %s' % (outpath,args) return cmd def exec_commands(conn,cmd): 'this is use the conn to excute the cmd and return the results of excute the command' stdin,stdout,stderr = conn.exec_command(cmd) results=stdout.read() return results def excutor(host,outpath,args): conn = connect(host) if not conn: return [host,None] #exec_commands(conn,'chmod +x %s' % outpath) cmd =command(args,outpath) result = exec_commands(conn,cmd) result = json.dumps(result) return [host,result]主にPythonのparamikoモジュールを使用してssh経由でLinuxサーバーに接続し、関連するコマンドを実行してファイルをサーバーにアップロードします。
以上がparamiko を使用してリモート サーバーに接続し、コマンドを実行する Python のサンプル コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。