paramiko模块
Paramiko模块
安装:
pip3 install paramiko
示例:
import paramiko
# 创建ssh对象
ssh = paramiko.SSHClient()
# 允许连接不在know_host文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='39.107.24.78',port=22,username='root',password='123456')
# 执行命令
stdin,stdout,stderr = ssh.exec_command('hostname')
# 获取命令结果
result = stdout.read()
# 关闭连接
ssh.close()
print(result.decode('utf-8'))
### 使用秘钥连接
# 获取私钥
private_key = paramiko.RSAKey.from_private_key_file(r'/Users/liuguixiang/.ssh/id_rsa')
ssh.connect(hostname='39.107.24.78',port=22,username='root',pkey=private_key)
import paramiko
from io import StringIO
#私钥
key = """
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAqSvjvRx9gljKOWe1vxwXAaL3wnw/0JIWZJz35g+3c8Sd3s43
vCQh3wqqx7CmglXk4zCvX5feqlnKIPQ98dWU/2Ng+VtkBab8foPE7b+efZ5Pc7XN
J3+Pjc67He2wnRjAaAJ6SjSfWLSH1wpxvOMn9tWnB0JJRFpnAW1p5Bzfy5kqRU70
Hmr8GswQgfxtdYcJ2jF8L5fEV8MqZAJ439QMs6Hz2tObTSuFd0FPVTqdSUb+r1Su
aO90+vrnqGpPgIG9hB/L2PP0KDvDg+MX7lgdfD7fLd9+AJ+uI8i+4iKmllGB6rNO
4NI3Be+S5HeiOeoXAxtH/q2YKuVgRC+NGY4zbQIDAQABAoIBAH+Njitave94DxH1
dn3gKiCbxf+oO12BqMy35dpbY1EwoHAMQM3k2H0Zx+bE9Oc06F28qZ6EHemHxfXO
8p3TEoL1ZXreQ65XV+30YJl6b3/7y6BNJaBwd8bOZxuLyizJKtnBdH9a6gKyK/Ih
99wZ0lo0gbnhaujU2PGkk8DhXIRfgA4qWCAkV9cSDVBwjYk6DIzggnXzjMMsuy43
MtWN8r42tPPqeq7bhSVlZarLkgOAAap9d33Pvf8EYiYTevcoLHjPiHhFxFr8qUYw
KakUv7g/aBj0npA0WjcjqvPe21IRS4LnlSRwccRCBmpQxWERj86r/KzqzHSMdr4v
zVRM5UECgYEA18+pP4uVgbgwawsJ2LsuBha/Hyc30G4h9Fe+t6yP22OAwQoyoQwe
-----END RSA PRIVATE KEY-----"""
# 创建ssh对象
ssh = paramiko.SSHClient()
# 允许连接不在know_host文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 获取私钥
private_key = paramiko.RSAKey(file_obj=StringIO(key))
# 连接服务器
ssh.connect(hostname='39.107.24.79',port=22,username='root',pkey=private_key)
# 执行命令
stdin,stdout,stderr = ssh.exec_command('hostname')
# 获取命令结果
result = stdout.read()
# 关闭连接
ssh.close()
print(result.decode('utf-8'))
示例二(上传下载文件):
import paramiko
transport = paramiko.Transport(('39.107.24.78',22))
transport.connect(username='root',password='123456')
sftp = paramiko.SFTPClient.from_transport(transport)
# 上传
sftp.put('a.txt','/data/a.txt')
# 下载
sftp.get('/data/a.txt','b.txt')
transport.close()
paramiko类
import paramiko
class SSHProxy(object):
def __init__(self,hostname,port,username,private_key_path):
self.hostname = hostname
self.port = port
self.username = username
self.private_key_path = private_key_path
self.transport = None
def open(self):
# 获取ssh秘钥
private_key = paramiko.RSAKey.from_private_key_file(self.private_key_path)
# 实例化transport对象
self.transport = paramiko.Transport((self.hostname,self.port))
# 建立连接
self.transport.connect(username=self.username,pkey=private_key)
def close(self):
self.transport.close()
def command(self,cmd):
"""
执行命令
:param cmd:
:return:
"""
ssh = paramiko.SSHClient()
ssh._transport = self.transport
stdin,stdout,stderr=ssh.exec_command(cmd)
result = stdout.read()
ssh.close()
return result
def upload(self,local_path,remote_path):
"""
上传文件
:param local_path:
:param remote_path:
:return:
"""
sftp = paramiko.SFTPClient.from_transport(self.transport)
sftp.put(local_path,remote_path)
sftp.close()
def __enter__(self):
self.open()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.close()
if __name__ == '__main__':
with SSHProxy("39.107.24.78",22,"root","/Users/liuguixiang/.ssh/id_rsa") as ssh:
result = ssh.command("hostname")
print(result)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下