徐晓冬约架赵翼龙,郑棒棒,沙坪坝二手房网
操作远程机器主要使用的有paramiko,WMI(Windows Management Instrumentation),SMBConnection.
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(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是客户端SMB /CIFS协议(SMB1和SMB2)的纯Python实现,它是便于在Windows机器之间进行文件共享和打印的底层协议,以及通过Samba服务器应用程序与Linux机器进行文件共享和打印。
from smb.SMBConnection import * # username: 远程主机用户名 password: 远程主机密码 # my_name: 本机主机计算机名 remote_name: 远程主机计算机名 # ip: 远程主机ip conn = SMBConnection(username, password, my_name, remote_name) conn = conn.connect(ip)
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()
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Python爬虫:Request Payload和Form Data的简单区别说明
浅谈Python中threading join和setDaemon用法及区别说明
Python3-异步进程回调函数(callback())介绍
python继承threading.Thread实现有返回值的子类实例
Python中使用threading.Event协调线程的运行详解
网友评论