如果我现在需要在Linux服务器上执行一系列命令(比如设置LNMP环境),我应该在第一时间想办法写一个Shell脚本,然后抛出去执行下面的结果。
但是,我总是很懒,我不想这样执行Shell和一些重复的命令。因此,我认为有一种方法可以直接在服务器端本地执行脚本,我想到了异端。这时,一位大师告诉我,有一个叫paramiko的Python库,打开了我新世界的大门。
对于paramiko直接安装pip或者PyCharm,这里就不多说了。如果看到这个后觉得自己不太懂python语法,不用担心。您可以简单地使用paramiko执行Shell命令来查看结果并上传和下载文件,从而节省重复的工作。
Paramiko实现SSHv2协议(底层使用密码学),该协议包括两个核心组件:SSHClient和SFTPClient。SSHClient是SSH会话执行远程命令的封装,SFTPClient是SFTP客户端实现远程文件操作的封装。
这里有两个例子。你应该知道如何使用它们。最后,故事片开始了。
ssh客户端的列:
# -*- coding: utf-8 -*-
导入paramiko
客户端=paramiko。SSHClient()#实例化SSHClient
client . set _ missing _ host _ key _ policy(paramiko . auto addpolicy())#自动添加策略保存服务器的主机名和密钥信息。如果不添加,不再记录在本地know_hosts文件中的主机将无法连接。
Client.connect(主机名=' 192.168.23.134 ',端口=22,用户名=' ftoz ',密码=' 123456') #连接SSH服务器并使用用户名和密码进行身份验证。
#打开频道并执行命令
Stdin,stdout,stderr=client . exec _ command(' ls ')# stdout是正确的输出,stderr是错误输出,一个变量有一个值。
#打印执行结果
print(stdout.read()。解码(' utf-8 ')
#关闭ssh客户端
client.close()
输出:
这里有一个解释:
客户端=paramiko。SSHClient(),
client . set _ missing _ host _ key _ policy(paramiko . auto addpolicy())可以理解为一种固定的姿态。
Client.connect(主机名=' 192.168.1.105 ',端口=22,用户名=' ftoz ',密码=' 123456 ')下面是您的linux变量的顺序:地址、端口(总共65535个端口,但ssh默认为22个端口)、登录名和密码。
Stdin,stdout,stderr=client . exec _ command(' df-h ')下面是您需要执行的核心shell命令。这三个变量不一定要遵循这个姿势,你可以做任何你想做的事情,但你只需要知道其中有哪些数据是按顺序排列的(重点是输出和错误)。
Connect():用于连接和验证远程服务器。这些参数是:
主机名连接的目标主机
端口=SSH_PORT指定端口
用户名=无经过验证的用户名
密码=无经过身份验证的用户密码
Pkey=没有私钥用于身份验证。
密钥文件名=无指定私钥文件的文件名或文件列表。
超时=无可选的tcp连接超时
Allow_agent=True,是否允许连接ssh代理,默认值为True。
查找密钥=真是否在~/中搜索私钥文件。ssh,默认情况下是允许的。
压缩=假,是否打开压缩。
Set_missing_host_key_policy():这是在know_hosts文件中没有记录远程服务器时设置远程服务器的响应策略。(可以理解为避免出错),参数有:
AutoAddPolicy自动将主机名和主机密钥添加到本地HostKeys对象中,与load_system_host_key的配置无关。也就是说,当您新建立ssh连接时,不需要输入是或否进行确认。
WarningPolicy用于记录python对未知主机密钥的警告。和接受,功能类似于自动添加策略,但会提示这是一个新连接。
RejectPolicy自动拒绝未知的主机名和密钥,具体取决于load_system_host_key的配置。这是默认选项。
Exec_command():这是您需要执行的命令。
接下来,您可以取出输出,做一些关于做什么(ke)和做什么(pa)的事情。这里有一个简单的例子。
2020年精选了阿里/腾讯等一线厂商的面试、简历、进阶、电子书私聊。我免费回复了“资料”。
SFTPClient的常用方法:
T=paramiko。传输((' 192.168.23.134 ',22)) #获取传输实例。
T.connect(用户名=' ftoz ',密码=' 123456') #连接SSH服务器并使用密码。
sftp=paramiko。SFTPClient.from_transport(t)
Sftp.put ('f:s12312.txt ','/home/ftoz/zxc12312.txt') #执行上传操作。
sftp . get('/home/ftoz/zxc 12312 . txt ',' f:s12312.txt') #执行下载操作。
t.close()
作为sftp的客户端对象,sftpCLient根据ssh传输协议的SFTP会话实现远程文件操作,如上传、下载、权限和状态。
From_transport(cls,t)创建一个连接的SFTP客户端通道。
Put (localpath,remotepath,callback=none,confirm=true)将本地文件上传到服务器参数confirm:是否调用stat()方法检查文件状态并返回ls -l L的结果。
Get (remotepath,localpath,callback=none)从服务器本地下载文件。
Mkdir()在服务器上创建一个目录
Remove()删除服务器上的目录。
重命名()重命名服务器上的目录。
Stat()查看服务器文件状态
List()列出服务器目录中的文件。
最后,养成和你亲近的好习惯。client.close()。