国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Python > 正文

python利用paramiko連接遠程服務(wù)器執(zhí)行命令的方法

2024-09-09 19:02:08
字體:
供稿:網(wǎng)友

python中的paramiko模塊是用來實現(xiàn)ssh連接到遠程服務(wù)器上的庫,在進行連接的時候,可以用來執(zhí)行命令,也可以用來上傳文件。

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函數(shù)中,參數(shù)是一個主機的IP地址或者是主機名稱,在執(zhí)行這個方法之后,如果成功的連接到服務(wù)器,那么就會返回一個sshclient對象。

第一步是建立一個SSHClient的對象,然后設(shè)置ssh客戶端允許連接不在know_host文件中的機器,然后就嘗試連接服務(wù)器,在連接服務(wù)器的時候,可以使用兩種方式:一種方式是使用秘鑰的方式,也就是參數(shù)look_for_keys,這里用設(shè)置密碼尋找,也可以直接使用密碼的方式,也就是直接使用參數(shù)password,從而最后返回一個連接的對象。

2、 獲取設(shè)置的命令

在進行paramiko連接之后,那么必須要得到需要執(zhí)行的命令,如下代碼所示:

def command(args,outpath):  'this is get the command the args to return the command'  cmd = '%s %s' % (outpath,args)  return cmd

在參數(shù)中,一個是args,一個outpath,args表示命令的參數(shù),而outpath表示為可執(zhí)行文件的路徑,例如/usr/bin/ls -l。在其中outpath也就是/usr/bin/ls ,而參數(shù)為-l

這個方法主要是用來組合命令,將分開的參數(shù)作為命令的一部分進行組裝。

3、 執(zhí)行命令

在連接過后,可以進行直接執(zhí)行命令,那么就有了如下的函數(shù):

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

在此函數(shù)中,傳入的參數(shù)一個為連接的對象conn,一個為需要執(zhí)行的命令cmd,最后得到執(zhí)行的結(jié)果,也就是stdout.read(),最后返回得到的結(jié)果

4、 上傳文件

在使用連接對象的時候,也可以直接進行上傳相關(guān)的文件,如下函數(shù):

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

此函數(shù)的主要參數(shù)為,一個是連接對象conn,一個是上傳的文件名稱,一個上傳之后的文件名稱,在此必須寫入完整的文件名稱包括路徑。

做法主要是打開一個sftp對象,然后使用put方法進行上傳文件,最后關(guān)閉sftp連接,最后返回一個上傳的文件名稱的完整路徑

5、 執(zhí)行命令得到結(jié)果

最后就是,執(zhí)行命令,得到返回的結(jié)果,如下代碼:

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]

首先,進行連接服務(wù)器,得到一個連接對象,如果連接不成功,那么返回主機名和None,表示沒有連接成功,如果連接成功,那么修改文件的執(zhí)行權(quán)限,從而可以執(zhí)行文件,然后得到執(zhí)行的命令,最后,進行執(zhí)行命令,得到結(jié)果,將結(jié)果用json格式表示返回,從而結(jié)果能得到一個美觀的json格式,最后和主機名一起返回相關(guān)的信息

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁城县| 天镇县| 安达市| 子洲县| 东丰县| 镇巴县| 怀仁县| 台南市| 平乐县| 鹤壁市| 花莲县| 连江县| 古丈县| 东城区| 隆尧县| 平泉县| 开化县| 乐平市| 漯河市| 祁门县| 竹北市| 长汀县| 广德县| 沽源县| 高雄县| 金塔县| 隆德县| 宜城市| 江川县| 湘阴县| 灌云县| 邵阳县| 财经| 集安市| 巴里| 唐山市| 青铜峡市| 金乡县| 汕头市| 兴和县| 新宁县|