远程连接python_Python操作远程机器

本文介绍了使用Python操作远程机器的三种方法:paramiko通过SSH连接Linux,WMI管理Windows,pysmb进行SMB/CIFS协议文件共享。详细阐述了如何执行命令、上传下载文件以及管理Windows进程。
摘要由CSDN通过智能技术生成

操作远程机器主要使用的有paramiko,WMI(Windows Management Instrumentation),SMBConnection.

paramiko

paramiko使用SSH2协议操作远程机器,是Python语言写的一个模块。

安装

pip install paramiko

使用

使用主要包括执行命令,上传文件和下载文件。

连接

有两种方式连接到linux服务器。

方式一:

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect("某IP地址",22,"用户名", "口令")

方式二:

t = paramiko.Transport(("主机","端口"))

t.connect(username = "用户名", password = "口令")

如果连接远程主机需要提供密钥,上面第二行代码可改为:

t.connect(username = "用户名", password = "口令", hostkey="密钥")

执行命令

import paramiko

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect("某IP地址",22,"用户名", "口令")

stdin, stdout, stderr = ssh.exec_command("你的命令")

print stdout.readlines()

ssh.close()

上传文件

import paramiko

t = paramiko.Transport(("主机","端口"))

t.connect(username = "用户名", password = "口令")

sftp = paramiko.SFTPClient.from_transport(t)

remotepath=’/var/log/system.log’

localpath=’/tmp/system.log’

sftp.put(localpath,remotepath)

t.close()

下载文件

import paramiko

t = paramiko.Transport(("主机","端口"))

t.connect(username = "用户名", password = "口令")

sftp = paramiko.SFTPClient.from_transport(t)

remotepath=’/var/log/system.log’

localpath=’/tmp/system.log’

sftp.get(remotepath, localpath)

t.close()

WMI

WMI(Windows Management Instrumentation)用于管理windows机器。以下实例功能是执行远程机器的bat文件。

import wmi

# 远程执行bat文件

def call_remote_bat(ipaddress, username, password):

try:

pythoncom.CoInitialize()

# 用wmi连接到远程服务器

c = wmi.WMI(computer=ipaddress, user=username, password=password)

filename = r"C:\auto_login.bat" # 此文件在远程服务器上

# filename = r"C:\agent\dist\machine.exe" # 此文件在远程服务器上

cmd_callbat = r"cmd /c call %s" % filename

c.Win32_Process.Create(CommandLine=cmd_callbat) # 执行bat文件 Win32_Process.Create

time.sleep(1)

except:

print('{}远程执行失败'.format(ipaddress))

pysmb

pysmb是客户端SMB /CIFS协议(SMB1和SMB2)的纯Python实现,它是便于在Windows机器之间进行文件共享和打印的底层协议,以及通过Samba服务器应用程序与Linux机器进行文件共享和打印。

使用pip安装即可:pip install pysmb

需安装Twisted依赖包: pip install Twisted

简单使用

创建一个访问对象,并建立连接.

from smb.SMBConnection import *

# username: 远程主机用户名 password: 远程主机密码

# my_name: 本机主机计算机名 remote_name: 远程主机计算机名

# ip: 远程主机ip

conn = SMBConnection(username, password, my_name, remote_name)

conn = conn.connect(ip)

常用方法。

servuce_name: 共享文件夹的名称

path: 新文件夹(相对于)共享文件夹的路径。如果路径包含非英文字符,则必须使用unicode字符串来传递路径。

timeout: pysmb将等待的秒数。

file_obj: 具有写入方法的类文件对象。

1. 创建新目录。

conn.createDirectory(service_name,path)

2. 删除空文件夹。

conn.deleteDirectory(service_name,path)

3. 删除文件。

conn.deleteFiles(service_name,path_file_pattern,timeout=30)

4. 重命名文件或文件夹。

# old_path: 旧文件名 new_path: 新文件名

conn.rename(service_name,old_path,new_path)

5. 获取远程主机的共享资源列表。

file_list = conn.listShares(timeout = 30)

# 遍历获取共享文件名

for file in file.list:

print(file.name)

6. 上传文件到远程主机。

conn.storeFile(service_name,path,file_obj, timeout=30)

实例

from smb.SMBConnection import *

def send_file(username, password, my_name, remote_name, ip, file_dir, file_dir_remote):

"""

pysmb下发脚本

:param username: 远程主机用户名

:param password: 远程主机密码

:param my_name: 本地计算机名

:param remote_name: 远程计算机名

:param ip: 远程ip

:param file_dir: 要传输的文件夹本地地址

:param file_dri_remote: 上传位置相对于c盘的路径

:return:

"""

try:

# 创建pysmb访问对象

conn = SMBConnection(username, password, my_name, remote_name)

# 创建pysmb连接

conn.connect(ip)

# 提取文件名或目录正则

pattern = re.compile(r'.*/(.*)')

# 读取文件对象

file_obj = open(file_dir, 'rb')

# 远程文件名

file_name = file_dir_remote + pattern.search(file_dir).group(1)

# 传输文件到远程主机

conn.storeFile('C$', file_name, file_obj)

file_obj.close()

except:

print('{}远程传输文件失败'.format(ip))

time.sleep(1)

call_remote_bat(ip, username, password)

try:

conn.deleteFiles('C$', file_name)

except:

print('{}远程删除文件失败'.format(ip))

conn.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值