一.基本使用
paramiko是SSH协议的python实现,用于连接远程服务器进行命令交互和文件传输。
import paramiko
cmd = "ls"
task_info = "ps -aux"
# 创建客户端对象
ssh = paramiko.SSHClient()
# 接收并保存新的主机名,此外还有RejectPolicy()拒绝未知的主机名
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# hostname:目标主机地址,port:端口号,username:登录用户名,password:密码
ssh.connect(hostname="10.21.7.120", username="root", password="123456", port=22)
# 执行命令,timeout为此次会话的超时时间,返回的是(stdin, stdout, stderr)的三元组
stdin, stdout, stderr = ssh.exec_command(cmd, timeout=20)
# 需要解码才能把返回的内容转换为正常的字符串形式
print(stdout.read().decode())
输出:python
test
test2
公共
模板
视频
图片
文档
下载
音乐
桌面
注意的是,exec_command()每次执行完命令后都会返回到根目录下,所以执行命令时需要带上绝对路径。另外,执行命令后的标准输出在stdout, stderr对象的buff中,使用read()读取再进行解码才能看到正常输出。
二.该模块的内置函数:def load_system_host_keys(self, filename=None)
以只读方式载入本机的host keys文件,如果配置文件有更新就用新的替代旧的
def load_host_keys(self, filename)
载入hsot keys文件且可以增加新的host key
def save_host_keys(self, filename)
保存host heys文件,只有使用load_host_keys()方法载入的文件才能够被成功保存
def connect() 函数中有这样一段代码标明了使用可靠通信协议:
sock = socket.socket(af, socket.SOCK_STREAM)
if timeout is not None:
try:
sock.settimeout(timeout)
except:
pass
retry_on_signal(lambda: sock.connect(addr))
# Break out of the loop on success
breakdef close()
关闭连接
def exec_command()
打开会话窗口并设置超时时间,虽然open_session()有一个默认参数window_size=None,但是函数内部说明了更改这个参数可能有不利影响,所以设置超时时间就够了
chan = self._transport.open_session(timeout=timeout)
if get_pty:
chan.get_pty()
chan.settimeout(timeout)
if environment:
chan.update_environment(environment)
chan.exec_command(command)
# 这里可以看到缓冲区的输入输出是字节类型的数据,所以在获取执行命令后的输出时需要decode()
stdin = chan.makefile_stdin("wb", bufsize)
stdout = chan.makefile("r", bufsize)
stderr = chan.makefile_stderr("r", bufsize)
return stdin, stdout, stderrdef invoke_shell() # 待补充
def open_sftp(self) 开启一个sftp协议的会话用于文件传输
更多介绍参考官方文档Welcome to Paramiko!www.paramiko.org
下一篇:Python--QueueINnoVation:Python--Queuezhuanlan.zhihu.com