版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Linux系統(tǒng)自動(dòng)化運(yùn)維(Python版)(微課版)工業(yè)和信息化精品系列教材項(xiàng)目6
遠(yuǎn)程管理和批量運(yùn)維服務(wù)器人民郵電出版社能力CAPACITY要求了解SSH遠(yuǎn)程管理功能,學(xué)會(huì)使用Paramiko庫編程實(shí)現(xiàn)SSH客戶端。熟悉Fabric庫的用法,學(xué)會(huì)使用Fabric庫編程實(shí)現(xiàn)源代碼批量部署。學(xué)會(huì)使用Fabric庫編程實(shí)現(xiàn)多服務(wù)器的系統(tǒng)集中監(jiān)控。學(xué)會(huì)使用Fabric庫編程實(shí)現(xiàn)程序批量部署。任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器任務(wù)說明01OPTION02OPTION03OPTION了解SSH協(xié)議了解Paramiko庫及其基本用法學(xué)會(huì)使用Paramiko庫編程實(shí)現(xiàn)以密鑰認(rèn)證方式登錄服務(wù)器04OPTION學(xué)會(huì)使用Paramiko庫編程實(shí)現(xiàn)文件傳輸任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器相關(guān)知識(shí)6.1.1SSH協(xié)議SSH基于成熟的公鑰加密體系,將所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密,保證數(shù)據(jù)在傳輸時(shí)不被惡意破壞、泄露和篡改。SSH使用多種加密和認(rèn)證方式,解決傳輸中數(shù)據(jù)加密和身份認(rèn)證的問題,能有效防止網(wǎng)絡(luò)嗅探和IP地址欺騙等攻擊。SSH用戶認(rèn)證方式密碼認(rèn)證密鑰認(rèn)證Linux平臺(tái)廣泛使用開源的OpenSSH程序?qū)崿F(xiàn)SSH協(xié)議。任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器相關(guān)知識(shí)6.1.2Paramiko庫簡(jiǎn)介Paramiko庫實(shí)現(xiàn)SSH協(xié)議建立遠(yuǎn)程安全連接遠(yuǎn)程命令執(zhí)行遠(yuǎn)程文件傳輸SSH代理安裝Paramiko庫pipinstallparamiko任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器相關(guān)知識(shí)6.1.2Paramiko庫簡(jiǎn)介Paramiko庫的核心類Channel:用于實(shí)現(xiàn)SSH通道,建立安全的SSH傳輸通道。SSHClient:用于實(shí)現(xiàn)SSH客戶端,以便與SSH服務(wù)器建立會(huì)話。Message:用于實(shí)現(xiàn)SSH2消息(字節(jié)流形式)。Packetizer:用于實(shí)現(xiàn)基本的SSH數(shù)據(jù)包協(xié)議。Transport:用于實(shí)現(xiàn)會(huì)話之間的流隧道(通道)。任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器相關(guān)知識(shí)6.1.3使用SSHClient類建立SSH連接SSHClient類的常用方法connect()——用于實(shí)現(xiàn)遠(yuǎn)程服務(wù)器的連接與認(rèn)證set_missing_host_key_policy()——設(shè)置服務(wù)器公鑰未被記錄到known_hosts文件時(shí)的應(yīng)對(duì)策略
exec_command()——在成功連接到服務(wù)器之后遠(yuǎn)程執(zhí)行命令open_sftp()——用于在當(dāng)前SSH會(huì)話的基礎(chǔ)上創(chuàng)建一個(gè)SFTP會(huì)話任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器相關(guān)知識(shí)6.1.3使用SSHClient類建立SSH連接SSHClient類的用法示例importparamiko#創(chuàng)建SSH對(duì)象ssh=paramiko.SSHClient()#允許連接未在know_hosts文件中列出的主機(jī)ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#連接服務(wù)器ssh.connect(hostname='0',port=22,username='root',password='abc123')#執(zhí)行命令stdin,stdout,stderr=ssh.exec_command('ls-ltr/etc')#獲取命令執(zhí)行結(jié)果res,err=stdout.read(),stderr.read()result=resifreselseerrprint(result.decode())任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器相關(guān)知識(shí)6.1.3使用SSHClient類建立SSH連接SSHClient類的用法示例#再執(zhí)行另一條命令并獲取命令執(zhí)行結(jié)果stdin,stdout,stderr=ssh.exec_command('df')res,err=stdout.read(),stderr.read()result=resifreselseerrprint(result.decode())#關(guān)閉連接ssh.close()任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器相關(guān)知識(shí)6.1.4使用Transport類控制SSH連接importparamiko#創(chuàng)建Transport對(duì)象transport=paramiko.Transport(('0',22))#建立SSH連接transport.connect(username='gly',password='abc123')#創(chuàng)建SSHClient對(duì)象并將其_transport變量指定為上述Transport對(duì)象ssh=paramiko.SSHClient()ssh._transport=transport#使用SSHClient對(duì)象的方法進(jìn)行遠(yuǎn)程操作stdin,stdout,stderr=ssh.exec_command('ls-ltr/etc')print(stdout.read().decode())#可以創(chuàng)建SFTPClient對(duì)象,繼續(xù)利用Transport對(duì)象及其連接執(zhí)行文件傳輸操作#關(guān)閉Transport對(duì)象及其連接transport.close()任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.1.1搭建多服務(wù)器實(shí)驗(yàn)環(huán)境Linux服務(wù)器配置修改服務(wù)器的主機(jī)名和IP地址主機(jī)名IP地址操作系統(tǒng)SSH服務(wù)器centossrv-a0CentOSStream8安裝并啟用centossrv-b1CentOSStream8安裝并啟用ubuntusrv-a0UbuntuServer20.04安裝并啟用任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.1.2基于密鑰認(rèn)證連接遠(yuǎn)程服務(wù)器配置SSH密鑰(1)在SSH服務(wù)器端啟用密鑰認(rèn)證。(2)在客戶端生成密鑰。(3)將公鑰提供給SSH服務(wù)器。(4)連接遠(yuǎn)程服務(wù)器進(jìn)行測(cè)試。任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.1.2基于密鑰認(rèn)證連接遠(yuǎn)程服務(wù)器編寫Python程序importparamiko#獲取私鑰private_key=paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')#創(chuàng)建SSH對(duì)象ssh=paramiko.SSHClient()#允許連接不在know_hosts文件中列出的主機(jī)ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#連接服務(wù)器,這里指定用戶名和私鑰ssh.connect(hostname='0',port=22,username='root',pkey=private_key)#執(zhí)行命令stdin,stdout,stderr=ssh.exec_command('df')#獲取命令執(zhí)行結(jié)果res,err=stdout.read(),stderr.read()result=resifreselseerrprint(result.decode())#關(guān)閉連接ssh.close()任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.1.3在遠(yuǎn)程服務(wù)器上執(zhí)行sudo命令#使用非root賬戶連接服務(wù)器ssh.connect('0',port=22,username='gly',password='abc123')#執(zhí)行sudo命令時(shí)加上-S選項(xiàng)stdin,stdout,stderr=ssh.exec_command('sudo-Scat/etc/shadow')#通過標(biāo)準(zhǔn)輸入提供用戶密碼,注意\n表示回車換行stdin.write('abc123\n')#刷新標(biāo)準(zhǔn)輸入的內(nèi)部緩沖區(qū),將其中內(nèi)容立即提供給標(biāo)準(zhǔn)輸入stdin.flush()res,err=stdout.read(),stderr.read()result=resifreselseerrprint(result.decode())任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.1.4實(shí)現(xiàn)交互式操作的遠(yuǎn)程偽終端importparamikoimportsysimportsocketimportselect#創(chuàng)建SSH對(duì)象并連接服務(wù)器ssh=paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh.connect('0',port=22,username='root',password='abc123')#啟動(dòng)交互式Shell會(huì)話返回一個(gè)新的通道channel=ssh.invoke_shell()任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.1.4實(shí)現(xiàn)交互式操作的遠(yuǎn)程偽終端#通過循環(huán)監(jiān)控用戶輸入和服務(wù)器的回顯數(shù)據(jù)whileTrue:
readable,writeable,error=select.select([channel,sys.stdin,],[],[],1)#如果服務(wù)器有數(shù)據(jù)返回(通常是命令執(zhí)行結(jié)果),則在終端進(jìn)行顯示
ifchannelinreadable:try:data=channel.recv(1024) #獲取服務(wù)器的回顯數(shù)據(jù)data=str(data,encoding='utf-8')#將字節(jié)轉(zhuǎn)換為字符串
iflen(data)==0:print('\r\n***EOF\r\n')breaksys.stdout.write(data) #寫入標(biāo)準(zhǔn)輸出的緩沖區(qū)
sys.stdout.flush() #刷新緩沖區(qū),將緩沖區(qū)內(nèi)容顯示出來
exceptsocket.timeout:pass#如果用戶在終端輸入內(nèi)容(通常是Shell命令),則將內(nèi)容發(fā)送到服務(wù)器
ifsys.stdininreadable:input=sys.stdin.readline()channel.sendall(input)#關(guān)閉通道和連接channel.close()ssh.close()任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)6.1使用Paramiko庫遠(yuǎn)程管理服務(wù)器任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)說明01OPTION02OPTION03OPTION了解Fabric庫及其基本用法了解遠(yuǎn)程執(zhí)行sudo命令的解決方案掌握基于Fabric庫的源代碼批量部署程序編寫方法04OPTION05OPTION掌握Fabric庫的系統(tǒng)集中監(jiān)控程序編寫方法掌握Fabric庫的程序批量自動(dòng)部署程序編寫方法任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器相關(guān)知識(shí)6.2.1Fabric庫簡(jiǎn)介特點(diǎn)提供豐富的SSH交互接口。集成系統(tǒng)基礎(chǔ)操作組件以簡(jiǎn)化程序部署和系統(tǒng)管理運(yùn)維操作。用來在遠(yuǎn)程服務(wù)器上自動(dòng)化、流水化地執(zhí)行Shell命令。安裝Fabric2最新版。pipinstallfabric使用Fabric庫實(shí)現(xiàn)自動(dòng)化部署和運(yùn)維的基本步驟(1)在遠(yuǎn)程服務(wù)器測(cè)試要執(zhí)行任務(wù)的Shell命令或腳本,盡可能地采用非交互式。(2)使用Fabric庫編寫執(zhí)行自動(dòng)化任務(wù)的Python程序。(3)運(yùn)行程序進(jìn)行測(cè)試,確定是否達(dá)到目標(biāo)。任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器相關(guān)知識(shí)6.2.2Connection類的基本用法使用Connection類建立連接
__init__(host,user=None,port=None,config=None,gateway=None,forward_agent=None,connect_timeout=None,connect_kwargs=None,inline_ssh_env=None)Connection類的常用方法方法功能open()打開連接run()在遠(yuǎn)程服務(wù)器上執(zhí)行命令sudo()以sudo方式在遠(yuǎn)程服務(wù)器上執(zhí)行命令put()將本地文件上傳到遠(yuǎn)程服務(wù)器get()從服務(wù)器上下載文件local()在本地系統(tǒng)上執(zhí)行Shell命令,該方法實(shí)際上是invoke.run()close()關(guān)閉連接任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器相關(guān)知識(shí)6.2.2Connection類的基本用法連接服務(wù)器并執(zhí)行命令fromfabricimportConnectionhost='0'user='root'password='abc123'#實(shí)例化Connection類以建立SSH連接c=Connection(host=host,user=user,connect_kwargs={'password':'abc123'})#在遠(yuǎn)程系統(tǒng)上運(yùn)行命令(用run()方法),并獲得返回結(jié)果result=c.run('uname-r')#顯示執(zhí)行命令返回的結(jié)果print(result.stdout.strip())#繼續(xù)執(zhí)行命令c.run('df')#切換當(dāng)前目錄連續(xù)執(zhí)行多條命令withc.cd('/home'):c.run("mkdir-ptestdir")c.run("touchtestfile")c.run("ls-l")#自動(dòng)切換回之前的目錄c.run("pwd")c.close()任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器相關(guān)知識(shí)6.2.3為sudo命令自動(dòng)提供密碼使用invoke模塊的Responder對(duì)象提供sudo密碼frominvokeimportResponderfromfabricimportConnectionc=Connection('gly@0',connect_kwargs={'password':'abc123'})user='gly'password='abc123'sudopass=Responder(pattern=f'\[sudo\]passwordfor{user}:',response=password+'\n')#注意需要設(shè)置pty=True以啟用偽終端c.run('sudocat/etc/shadow',pty=True,watchers=[sudopass])c.close()任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器相關(guān)知識(shí)6.2.3為sudo命令自動(dòng)提供密碼使用Config類提供sudo密碼fromfabricimportConfigfromfabricimportConnection#預(yù)先配置sudo密碼config=Config({'sudo':{'password':'abc123'}})c=Connection('gly@0',connect_kwargs={'password':'abc123'},config=config)#使用sudo方法執(zhí)行命令c.sudo(cat/etc/shadow')c.close()任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器相關(guān)知識(shí)6.2.4批量操作遠(yuǎn)程服務(wù)器使用Group類fromfabricimportSerialGroupasGrouphosts=("root@0","gly@0")pool=Group(*hosts,connect_kwargs={"password":"abc123"})pool.run('mkdir-p/tmp/test')pool.put('fabric_basic.py','/tmp/test')pool.close()任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器相關(guān)知識(shí)6.2.4批量操作遠(yuǎn)程服務(wù)器使用Group類(改進(jìn))fromfabricimportSerialGroupasGrouphosts=("root@0","gly@0")pool=Group(*hosts,connect_kwargs={"password":"abc123"})#定義函數(shù),參數(shù)為Connection對(duì)象defupload(c):#如要?jiǎng)?chuàng)建的目錄不存在,則創(chuàng)建該目錄
ifnotc.run('test-e/tmp/test',warn=True):c.run('mkdir-p/tmp/test')c.put('fabric_basic.py','/tmp/test')#遍歷組成員,每個(gè)連接執(zhí)行該函數(shù)forconninpool:upload(conn)任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器相關(guān)知識(shí)6.2.5傳統(tǒng)的fab命令行工具在fabfile文件中使用函數(shù)定義任務(wù)fromfabricimporttask@taskdefupload(c):ifnotc.run('test-e/tmp/test',warn=True):
c.run('mkdir/tmp/test')c.put('fabric_basic.py','/tmp/test’)執(zhí)行由upload()函數(shù)定義的任務(wù)fab-Hcnetossrv-aupload任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.1批量部署源代碼部署源代碼的一般步驟(1)本地打包源文件。(2)將源文件包上傳到目標(biāo)服務(wù)器。(3)校驗(yàn)文件的一致性??杀葘?duì)本地源文件包和服務(wù)器上的源文件包的MD5值。(4)在目標(biāo)服務(wù)器上對(duì)源文件包進(jìn)行解壓縮。任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.1批量部署源代碼Python程序?qū)崿F(xiàn)批量部署fromfabricimportConfigimportinvoke#定義目標(biāo)服務(wù)器集合hosts=("root@0","gly@0")#配置sudo密碼config=Config(overrides={'sudo':{'password':'abc123'}})#創(chuàng)建Group對(duì)象,統(tǒng)一建立組成員服務(wù)器的SSH連接group=Group(*hosts,connect_kwargs={"password":"abc123"},config=config)任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.1批量部署源代碼Python程序?qū)崿F(xiàn)批量部署#本地文件打包invoke.run("tar-czfsource_test.tar.gz*.py")#計(jì)算本地壓縮包文件的MD5值local_md5=invoke.run("md5sumsource_test.tar.gz").stdout.split('')[0]#定義上傳校驗(yàn)函數(shù)defupload_check(c):c.sudo("mkdir-p/source_test")#修改目標(biāo)目錄權(quán)限
c.sudo("chmod777/source_test")#上傳壓縮包文件
c.put("source_test.tar.gz","/source_test/")#計(jì)算已上傳的壓縮包文件的MD5值
remote_md5=c.run("md5sum/source_test/source_test.tar.gz").stdout.split('')[0]任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.1批量部署源代碼Python程序?qū)崿F(xiàn)批量部署#比較本地與遠(yuǎn)程壓縮包文件的MD5值,進(jìn)行校驗(yàn)
ifremote_md5==local_md5:print(c.host+"服務(wù)器上已完成上傳")
c.run("tar-zxvf/source_test/source_test.tar.gz-C/source_test")else:print(c.host+"服務(wù)器上上傳失敗")#還原目標(biāo)目錄權(quán)限
c.sudo("chmod754/source_test")#遍歷組成員并執(zhí)行上傳校驗(yàn)函數(shù)forconningroup:upload_check(conn)group.close()任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.2集中采集多臺(tái)服務(wù)器的系統(tǒng)信息Python程序fromfabricimportSerialGroupasGrouphosts=("root@0","gly@0")group=Group(*hosts,connect_kwargs={"password":"abc123"})#定義匯總服務(wù)器系統(tǒng)信息的數(shù)組data_total=[]#定義執(zhí)行Shell命令采集系統(tǒng)信息的函數(shù)defget_sysinfo(c):#定義采集服務(wù)器系統(tǒng)信息的命令字典
sys_commands={"hostname":"hostname",┈┈"disk_usage":"df/|sed-n'2p'|awk'{print$5}'"}data_sys={}#定義匯集單臺(tái)服務(wù)器系統(tǒng)信息結(jié)果的字典任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.2集中采集多臺(tái)服務(wù)器的系統(tǒng)信息Python程序
#遍歷字典,執(zhí)行Shell命令采集多種系統(tǒng)信息(其中CPU和內(nèi)存使用率需單獨(dú)計(jì)算)
foritem,commandinsys_commands.items():ifitem=="cpu_idle":cpu_idle=c.run(command).stdout.rstrip('\n‘)┈┈else:data_sys[item]=c.run(command).stdout.rstrip('\n')data_total.append(data_sys)#定義輸出系統(tǒng)信息報(bào)告的函數(shù)(這里輸出到控制臺(tái))defreport(label,item):print(f"\n{label:15}",end="")fordata_sysindata_total:print(f"{data_sys[item]:40}",end="")任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.2集中采集多臺(tái)服務(wù)器的系統(tǒng)信息Python程序#遍歷組成員,采集各服務(wù)器系統(tǒng)信息forconningroup:get_sysinfo(conn)group.close()#定義報(bào)告用的系統(tǒng)信息項(xiàng)目字典item_names={'hostname':'服務(wù)器','kernel':'Linux內(nèi)核','architecture':'體系結(jié)構(gòu)','ipadd':'IP地址','cpu_usage':'CPU使用率','memory_usage':'內(nèi)存使用率','process_number':'當(dāng)前進(jìn)程數(shù)','disk_usage':'磁盤使用率'}#輸出系統(tǒng)信息報(bào)告print("===============================服務(wù)器系統(tǒng)信息============================")foritem,labelinitem_names.items():report(label,item)任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.2集中采集多臺(tái)服務(wù)器的系統(tǒng)信息測(cè)試結(jié)果任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.3自動(dòng)部署LAMP平臺(tái)在Linux系統(tǒng)中部署LAMP平臺(tái)的一般步驟(1)安裝Apache服務(wù)器。(2)安裝數(shù)據(jù)庫服務(wù)器。(3)安裝PHP運(yùn)行環(huán)境。(4)安裝phpMyAdmin管理工具。任務(wù)6.2使用Fabric庫批量管理和運(yùn)維服務(wù)器任務(wù)實(shí)現(xiàn)任務(wù)6.2.3自動(dòng)部署LA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 住宅物業(yè)租賃合同(詳細(xì)版)版B版
- 2025年度互聯(lián)網(wǎng)廣告代理合同增加補(bǔ)充協(xié)議范本
- 2025年度大型購物中心營(yíng)業(yè)員勞動(dòng)合同及員工福利保障
- 2025年度人工智能應(yīng)用合伙合作合同
- 2025年度海上船舶租賃運(yùn)輸合同及保險(xiǎn)條款
- 2025年度股權(quán)質(zhì)押借款合同范本集錦
- 二零二五年度船舶租賃保險(xiǎn)合同6篇
- 2025年度綠色能源股權(quán)回購與轉(zhuǎn)讓服務(wù)合同
- 書房貸款分割合同:2024年標(biāo)準(zhǔn)離婚版本版B版
- 2025年度體育賽事贊助合同簽訂指南-@-1
- 二年級(jí)數(shù)學(xué)上冊(cè)100道口算題大全(每日一練共12份)
- 河南省鄭州市2023-2024學(xué)年高一下學(xué)期6月期末數(shù)學(xué)試題(無答案)
- 七年級(jí)數(shù)學(xué)垂線1
- JTG C10-2007 公路勘測(cè)規(guī)范
- 糖尿病酮癥酸中毒護(hù)理查房演示課件
- 重大危險(xiǎn)源的風(fēng)險(xiǎn)評(píng)估模型
- 采購支出管理制度
- 混凝土試件臺(tái)賬
- 人機(jī)料法環(huán)測(cè)檢查表
- 中國數(shù)字貨運(yùn)發(fā)展報(bào)告
評(píng)論
0/150
提交評(píng)論