ホームページ  >  記事  >  バックエンド開発  >  paramiko を使用してリモート サーバーに接続し、コマンドを実行する Python のサンプル コード

paramiko を使用してリモート サーバーに接続し、コマンドを実行する Python のサンプル コード

黄舟
黄舟オリジナル
2017-10-16 11:02:412065ブラウズ

次のエディターは、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

connect 関数では、パラメータはホストの IP アドレスまたはホスト名です。このメソッドでは、サーバーへの接続が成功すると、sshclient オブジェクトが返されます。

最初のステップは、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

で、主にコマンドを結合し、別々のパラメータをコマンドの一部として組み立てる場合に使用されます。


3. コマンドを実行します

接続後、コマンドを直接実行できます:

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 接続を閉じ、最後にアップロードされたファイル名のフルパスを返すことです


5 コマンドを実行して取得します。結果

最後に、コマンドを実行して返された結果、次のコードを取得します:

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形式で得られ、最後にホスト名と一緒に返されます

6.

テスト コードは次のとおりです:

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。