paramiko远程连接服务器
1.安装:
pip install paramiko
2.连接
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname="要连接主机IP", port=22, username='root', password='用户密码')
stdin, stdout, stderr = ssh.exec_command('df')
result = (stdout.read().decode('utf-8'))
print(result)
ssh.close()
import paramiko
private_key = paramiko.RSAKey.from_private_key_file(r'J:\westCoastKey.pem')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='要连接主机ip', port=22, username='root', pkey=private_key)
stdin, stdout, stderr = ssh.exec_command('df')
result = stdout.read()
print(result.decode())
ssh.close()
3.一个简单封装:
import paramiko
class SSHConnection(object):
def __init__(self,host,port,username,pwd):
self.host = host
self.port = port
self.username = username
self.pwd = pwd
def connect(self):
"""建立连接"""
transport = paramiko.Transport(self.host,self.port)
transport.connect(username=self.username,password=self.pwd)
self.__transport = transport
def close(self):
"""
关闭ssh连接
:return:
"""
self.__transport.close()
def cmd(self,command):
ssh = paramiko.SSHClient()
ssh._transport = self.__transport
stdin, stdout, stderr = ssh.exec_command(command)
result = stdout.read()
return str(result,encoding="utf-8")
def download(self, remote_path, local_path):
"""
下载
:param remote_path: 是远端文件路径
:param local_path: 下载本地文件路径
:return:
"""
sftp = paramiko.SFTPClient.from_transport(self.__transport)
sftp.get(remote_path,local_path)
def upload(self, local_path, target_path):
"""
上传信息
:param local_path: 本地文件路径
:param target_path: 远端文件路径
:return:
"""
sftp = paramiko.SFTPClient.from_transport(self.__transport)
sftp.put(local_path, target_path)
def main():
ssh = SSHConnection("要连接主机IP",22,"root","登陆密码")
ssh.connect()
ssh.cmd("ps -ef | grep nginx")
ssh.download("远程文件路径","本地文件路径")
ssh.upload("本地文件路径","远程文件路径")
ssh.close()
if __name__ == '__main__':
main()
4.像xshell一样操作服务器
import paramiko
import re
from time import sleep
class Linux(object):
def __init__(self, ip, username, password, timeout=30):
self.ip = ip
self.username = username
self.password = password
self.timeout = timeout
self.t = ''
self.chan = ''
self.try_times = 3
def connect(self):
while True:
try:
self.t = paramiko.Transport(sock=(self.ip, 22))
self.t.connect(username=self.username, password=self.password)
self.chan = self.t.open_session()
self.chan.settimeout(self.timeout)
self.chan.get_pty()
self.chan.invoke_shell()
print('连接%s成功' % self.ip)
print(self.chan.recv(65535).decode('utf-8'))
return
except Exception:
if self.try_times != 0:
print('连接%s失败,进行重试' %self.ip)
self.try_times -= 1
else:
print('重试3次失败,结束程序')
exit(1)
def close(self):
self.chan.close()
self.t.close()
def send(self, cmd):
cmd += '\r'
p = re.compile(r']#')
result = ''
self.chan.send(cmd)
while True:
sleep(0.5)
ret = self.chan.recv(65535)
ret = ret.decode('utf-8')
result += ret
if p.search(ret):
result = result.strip(cmd)
print(result, end=" ")
return result
if __name__ == '__main__':
host = Linux("要连接服务器IP", "用户名", "密码")
host.connect()
while True:
cmd = input()
if cmd == "exit":
host.close()
break
host.send(cmd)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库