如果你需要在Linux服务器上执行一系列命令(比如搭建LNMP环境),我应该马上想办法写一个Shell脚本,并且然后扔上去执行下面的检查结果。但是,我一向懒惰,不想用这种方式去执行Shell和一些重复的命令。于是就想到了一种在本地直接在服务器端执行脚本的方法,想到了异端。这时,某giba告诉我,有一个叫paramiko的Python库,打开了我新世界的大门。对于paramiko安装直接pip或者PyCharm,这里就不多说了。如果您觉得自己对Python语法了解不多,请不要担心。可以使用paramiko简单的执行Shell命令查看结果和上传下载文件。重复性工作。Paramiko实现了SSHv2协议(底层使用密码学),包括两个核心组件:SSHClient和SFTPClient。SSHClient是对SSH会话的封装,用于执行远程命令,SFTPClient是对SFTP客户端的封装,用于实现远程文件操作。下面先举两个例子,大家应该明白怎么用了,最后开始正片。SSHClient示例:#-*-coding:utf-8-*-importparamikoclient=paramiko.SSHClient()#InstantiateSSHClientclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())#自动添加策略并保存服务器主机名和密钥信息,如果没有添加,则本地know_hosts文件中不再记录的主机将无法连接client.connect(hostname='192.168.23.134',port=22,username='ftoz',password='123456')#连接SSH服务Terminal,使用用户名和密码进行认证#打开一个Channel,执行命令stdin,stdout,stderr=client.exec_command('ls')#stdout为正确输出,stderr为错误输出,有1个变量withvalue同时输出#打印执行结果print(stdout.read().decode('utf-8'))#closeSSHClientclient.close()输出:这里解释一下:client=paramiko.SSHClient(),client.set_missing_host_key_policy(paramiko.AutoAddPolicy())可以理解为固定姿势。client.connect(hostname='192.168.1.105',port=22,username='ftoz',password='123456')这里是你的linux变量按照地址和端口的顺序(总共65535个端口,但是ssh默认是22端口)、登录名、密码。stdin,stdout,stderr=client.exec_command('df-h')下面是你需要做的核心shell命令,这三个变量不需要按照这个姿势,你想怎么弄就怎么弄,但是你懂的数据在里面按照顺序就行了(重点是输出和错误)。connect():这是实现远程服务器连接和认证,参数为:hostnametargethostport=SSH_PORTspecifiedportusername=Noneauthenticatedusernamepassword=Noneauthenticateduserpasswordpkey=None私钥方式用于身份验证key_filename=None一个文件名或文件列表,指定私钥文件timeout=Noneoptionaltcpconnectiontimeoutallow_agent=True,是否允许连接ssh代理,默认为Trueallowlook_for_keys=True是否在~/.ssh搜索对于私钥文件,默认为True,allowcompress=False,是否开启压缩。set_missing_host_key_policy():这个是设置know_hosts文件中没有记录远程服务器时的响应策略。(可以理解为避免报错),参数为:AutoAddPolicy自动将主机名和主机密钥添加到本地的HostKeys对象中,与load_system_host_key的配置无关。即在建立新的ssh连接时不需要输入yes或no进行确认。WarningPolicy用于记录未知主机密钥的python警告。而accept,功能类似AutoAddPolicy,但是会提示新连接RejectPolicy自动拒绝未知主机名和密钥,具体取决于load_system_host_key的配置。这是默认选项exec_command():这是写你需要执行的命令。然后你就可以把输出拿出来,做一些关于做什么(ke)和做什么(pa)的事情。这是一个简单的例子。SFTPClient常用方法:t=paramiko.Transport(('192.168.23.134',22))#获取Transport实例t.connect(username='ftoz',password='123456')#连接SSH服务器,使用密码ftp=paramiko.SFTPClient.from_transport(t)sftp.put("F:\S12312.txt","/home/ftoz/zxc12312.txt")#执行上传动作sftp.get("/home/ftoz/zxc12312.txt","F:\S12312.txt")#执行下载动作t.close()SFTPClient作为sftp客户端对象,根据ssh传输协议的sftp会话,实现远程文件操作,如上传、下载、permission,statusfrom_transport(cls,t)创建连接的SFTP客户端通道put(localpath,remotepath,callback=None,confirm=True)上传本地文件到服务器参数confirm:是否调用stat()方法检查文件状态,返回ls-lget(remotepath,localpath,callback=None)的结果从服务器下载文件到本地mkdir()在服务器上创建目录remove()删除服务器上的目录rename()重命名服务器上的某个目录stat()查看服务器文件状态listdir()列出服务器目录下的文件最后养成用client.close()关闭的好习惯。看到的都是真爱,走之前怎么不竖个大拇指?您的“三通”是良旭继续创作的最大动力!关注原创公众号《良序Linux》,第一时间获取最新Linux干货!公众号后台回复【信息】【面试】【简历】获取精选一线大厂的面试、自我提升、简历等信息。关注我的博客:lxlinux.net
