Python3一些常用的SSH连接_paramiko使用
一、SSH连接
可参考文章
(1)安装paramiko库,使用命令安装
pip install paramiko
1.2Paramiko的主要类
- SSHClient: 最常用的类,表示一个SSH客户端连接。
- SFTPClient: 用于SFTP传输操作。
- Transport: 低级别的模块,可用来实现SSH2协议。
- SSHClient主要方法:(先创建一个ssh对象:ssh)
- ssh.connnect()
- ssh.exec_command()
#1.用于连接到远程服务器。可以选择使用用户名和密码或密钥进行认证。
connect(hostname, port=22, username=None, password=None, pkey=None):
#2.在远程服务器上执行指令
exec_command(command):
#3.返回一个SFTPClient对象,可用于文件的上传与下载。
open_sftp():
- SFTPClient主要方法:
#1.下载远程文件
get(remotepath, localpath, callback=None):
#2.上传本地文件
put(localpath, remotepath, callback=None, confirm=True):
#3.列出远程目录的内容
listdir(path=“.”):
1.3示例代码
(1)异常处理机制
import paramiko
##----------创建SSH对象---------
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #允许连接不在已知文件中的主机
#-----------连接设备------------
def connect_device(ip_addr):
try:
ssh.connect(ip_addr, username='root', password='123') #输入连接设备的参数
except paramiko.AuthenticationException:
print("Can't connect device for authentication failed!")
return 'err'
except socket.error:
print("Can't connect device for unreachable server!")
return 'err'
#-----------断开连接-------------
def disconnect_device():
ssh.close()
(2)提高安全性:使用SSH密钥进行连接
import paramiko
# 设置SSH连接参数
hostname = 'your_remote_host'
port = 22
username = 'your_username'
private_key_path = '/path/to/your/private/key'
# 创建SSH客户端,加载私钥文件
private_key = paramiko.RSAKey(filename=private_key_path)
client = paramiko.SSHClient()
# 自动添加主机密钥
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
# 连接远程主机,使用SSH密钥进行身份验证
client.connect(hostname, port, username, pkey=private_key)
except paramiko.AuthenticationException as e:
print(f"Authentication Error: {e}")
finally:
client.close() # 关闭SSH连接,也可用如下disconnect_device函数断开连接
def disconnect_device():
client.close()
二、生成日志
#生成ST_LOG日志
logger = logging.getLogger("LOG") #初始化,name可不填
logger.setLevel(logging.DEBUG) #设置日志等级:DEBUG,最低等级,所有报错信息都输出
ch = logging.FileHandler(('ST_LOG_modify_rcache') + time.strftime('%Y%m%d%H%M%S')) #以年月日,时分秒的时间将日志输出到文件 (此处输入的是文件名,不能有空格和冒号)
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") #日志输出格式
ch.setFormatter(formatter) #设置日志输出格式(要先设置日志输出、日志格式)
logger.addHandler(ch) #给logger添加handler,确定将日志log写到ch文件