当前位置: 首页 > article >正文

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文件


http://www.kler.cn/news/343521.html

相关文章:

  • 调度算法-先来先服务
  • EtherNet IP网关HT3S-EIS-MDN读取七星华创CS310空气流量计数据应用案例
  • JavaScript 代码行前添加分号
  • 【部署分布式数据库DBMS】
  • 机房空调远程控制-Thingsboard MQTT 接口说明
  • 吐槽kotlin之垃圾设计
  • 用Electron时候碰到的小问题
  • <OS 有关> Docker.Desktop - Unexpected WSL error #14030 不能启动, 问题已经解决 fixed
  • PDFToMarkdown
  • 如何使用ssm实现新冠病毒校园监控平台的设计与实现+vue
  • 【进阶OpenCV】 (8)--摄像头操作--->识别文档内容
  • Java->Map和Set
  • VMWare vsphere ESXi 6.7在线升级至7.0.3
  • 使用antdv的a-table行拖拽
  • 强化学习笔记之【SAC算法】
  • 学习笔记之指针进阶(10.11)
  • 数据库SQL 某字段按首字母排序_sql按首字母排序
  • 解决PyCharm 2023 Python Packages列表为空
  • 【Docker】03-自制镜像
  • LeetCode讲解篇之746. 使用最小花费爬楼梯