一、 paramiko 安装
pip3 install paramiko
二、paramiko 核心组件
SSHClient 类
SSHClient类是服务回话的高级表示,该类封装了传输,通道,以及SFTPClient的校验,建立的方法
1 client = SSHClient() 2 client.load_system_host_keys() 3 client.connect(hostname,user,password) 4 stdin,stdout,stderr = client.exec_command("ls -l")
-- connect 方法
connect方法实现了远程SSH连接并校验
connect(self,hostname,username,port,password)
-- exec_command方法
远程命令执行方法,该命令的输入和输出流为:标准输入,输出,错误输出
exec_command(self,command,bufsize=-1)
command(str类型):执行的命令串
bufsize(int 类型):文件缓冲区大小,默认为1
-- load_system_host_keys
加载本地公钥校验文件
load_system_host_keys(self,filename=None)
-- set_missing_host_key_policy
设置连接的远程主机没有本地主机秘钥和HostKeys对象时的策略,目前支持下面三种:
AutoAddPolicy
自动添加主机及主机秘钥到本地HostKey对象,并将其保存,不依赖 load_system_host_keys()的配置
RejectPolicy
自动拒绝未知的主机名和秘钥,依赖 load_system_host_keys 的配置
WarningPolicy
用于记录一个未知的主机秘钥的告警,并接受他
SSHClient示例:
1.实现秘钥方式登录远程主机
1 #!/usr/bin/env python3 2 import paramiko 3 import os 4 5 hostname='127.0.0.1' 6 username='root' 7 paramiko.util.log_to_file('syslogin.log') 8 9 ssh=paramiko.SSHClient() 10 ssh.load_system_host_keys() 11 privatekey = os.path.expanduser('/root/.ssh/id_rsa') 12 key=paramiko.RSAKey.from_private_key_file(privatekey) 13 14 ssh.connect(hostname=hostname,username=username,pkey=key) 15 stdin,stdout,stderr = ssh.exec_command('free -m') 16 print(stdout.read()) 17 ssh.close()
2. 实现密码登录远程主机
1 hostname = "127.0.0.1" 2 user = "root" 3 password = "root@123" 4 paramiko.util.log_to_file("syslogin.log") 5 ssh = paramiko.SSHClient # creat a ss client object 6 ssh.load_system_host_keys() # get client's host_keys 7 ssh.connect(hostname=hostname,username=username,password=password) # create ssh connect 8 print(ssh.exec_command("free -m")) 9 stdin,stdout,stderr = ssh.exec_command("free -m") 10 print(stdout.read()) 11 ssh.close()