1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python使用paramiko连接远程服务器执行命令的示例代码

python使用paramiko连接远程服务器执行命令的示例代码

时间:2019-08-28 20:21:47

相关推荐

python使用paramiko连接远程服务器执行命令的示例代码

后端开发|Python教程

paramiko,python,远程

后端开发-Python教程

下面小编就为大家带来一篇python利用paramiko连接远程服务器执行命令的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

最新同城网站源码,ubuntu中安装命令,爬虫钙粉RS,使用php开发,秦皇岛seo推广lzw

python中的paramiko模块是用来实现ssh连接到远程服务器上的库,在进行连接的时候,可以用来执行命令,也可以用来上传文件。

libgif 源码下载,vscode 彻底删除,ubuntu 招行,tomcat 加密图片,c wpf和sqlite,ecshop网银支付插件,带权限管理的前端框架,爬虫京东小米手机代码,php判断是否包含字符,萝岗区seo价格,手机网站悬浮广告代码,原创 网页滚屏特效全攻略,小说网页模板 下载lzw

1、得到一个连接的对象

供应商预约系统源码,vscode设置初始化,ubuntu 升级日志,关闭tomcat日志打印,爬虫虎斑,php在线考试系统论文,seo快速排名实战推广,周伯通人才招聘网站源码,ppt 图片切换模板lzw

在进行连接的时候,可以使用如下的代码:

def connect(host): his 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= oot,allow_agent=True,look_for_keys=True) ssh.connect(host,username= oot,password= oot,allow_agent=True) return ssh except: return None

在connect函数中,参数是一个主机的IP地址或者是主机名称,在执行这个方法之后,如果成功的连接到服务器,那么就会返回一个sshclient对象。

第一步是建立一个SSHClient的对象,然后设置ssh客户端允许连接不在know_host文件中的机器,然后就尝试连接服务器,在连接服务器的时候,可以使用两种方式:一种方式是使用秘钥的方式,也就是参数look_for_keys,这里用设置密码寻找,也可以直接使用密码的方式,也就是直接使用参数password,从而最后返回一个连接的对象。

2、 获取设置的命令

在进行paramiko连接之后,那么必须要得到需要执行的命令,如下代码所示:

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

在参数中,一个是args,一个outpath,args表示命令的参数,而outpath表示为可执行文件的路径,例如/usr/bin/ls -l。在其中outpath也就是/usr/bin/ls ,而参数为-l

这个方法主要是用来组合命令,将分开的参数作为命令的一部分进行组装。

3、 执行命令

在连接过后,可以进行直接执行命令,那么就有了如下的函数:

def exec_commands(conn,cmd): his 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

在此函数中,传入的参数一个为连接的对象conn,一个为需要执行的命令cmd,最后得到执行的结果,也就是stdout.read,最后返回得到的结果

4、 上传文件

在使用连接对象的时候,也可以直接进行上传相关的文件,如下函数:

def copy_moddule(conn,inpath,outpath): his is copy the module to the remote server ftp = conn.open_sftp() ftp.put(inpath,outpath) ftp.close() return outpath

此函数的主要参数为,一个是连接对象conn,一个是上传的文件名称,一个上传之后的文件名称,在此必须写入完整的文件名称包括路径。

做法主要是打开一个sftp对象,然后使用put方法进行上传文件,最后关闭sftp连接,最后返回一个上传的文件名称的完整路径

5、 执行命令得到结果

最后就是,执行命令,得到返回的结果,如下代码:

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]

首先,进行连接服务器,得到一个连接对象,如果连接不成功,那么返回主机名和None,表示没有连接成功,如果连接成功,那么修改文件的执行权限,从而可以执行文件,然后得到执行的命令,最后,进行执行命令,得到结果,将结果用json格式表示返回,从而结果能得到一个美观的json格式,最后和主机名一起返回相关的信息

6、 测试代码

测试代码如下:

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 pythonimport jsonimport paramikodef connect(host): his 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= oot,allow_agent=True,look_for_keys=True) ssh.connect(host,username= oot,password= oot,allow_agent=True) return ssh except: return Nonedef command(args,outpath): his is get the command the args to return the command cmd = \%s %s % (outpath,args) return cmddef exec_commands(conn,cmd): his 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 resultsdef 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]

def copy_module(conn,inpath,outpath): his is copy the module to the remote server ftp = conn.open_sftp() ftp.put(inpath,outpath) ftp.close() return outpathif __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)

主要就是使用python中的paramiko模块通过ssh连接linux服务器,然后执行相关的命令,并且将文件上传到服务器。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。