paramiko上傳
❶ python中paramiko模塊 sftp上傳後文件內容每行都是^M結尾,請教怎麼解決
^M好像是回車的意思。
如果你這個是文本文件,那你用replace函數先把^M這個字元替換成空格,然後在strip一下就沒了。
❷ 程序員應知應會之自動化運維那些事兒
對於一個開發人員來講,可能運維並不是自己的職責所在。但是作為一名開發人員,卻不能不了解自動化運維的整個流程。因為對於一個信息系統而言,開發和運維本質是一體的,尤其對於一些小公司來講,可能運維人員本身就是開發人員抽空兼任的。
而自動化運維,本質上是介於開發和運維之間的,是運維和開發的交集,甚至很多時候都要寫不少代碼。因此,任何一個開發人員,都需要有自動化運維的相關知識。
一個了解好的開發人員,即使自己不做運維相關的工作,也能夠知道自己在將項目交付給運維人員的時候,哪些東西是重要的,那些是必須配置的等等。然而在實際工作中,往往開發人員會給運維人員留下一些坑,一些只有他自己知道,而運維人員不知道的東西。導致運維人員自己試了很多次發現不行的時候,找到開發人員,開發人員研究了一下才會告訴他,在某某環境中必須用哪個埠之類的。這樣不僅白白浪費了運維人員的時間,也增加了很多溝通的工作量。
反過來也是如此,一些現場的問題如果運維人員不能現場給出問題的定位。對於開發人員來講是非常難以復現的。比如之前有某家企業,運維人員在客戶現場發現問題。費了很大力氣從客氣的內網裡面把日誌導出來,發給開發人員,結果開發人員仔細研究了日誌之後,發現是網不通的問題。開發人員顯然是不可能知道為啥網不通的,搞不好是壓根沒連網線。
所以今天我們來聊一聊,對於一個程序員來講,需要了解的自動化運維的那些事。
一、自動化運維的概念
隨著信息時代的持續發展,初期的幾台伺服器已經發展成為了龐大的數據中心,單靠人工已經無法滿足在技術、業務、管理等方面的要求。一個運維人員手工配置幾台伺服器還可能。配置幾百上千台伺服器那就累死了,還容易出錯。那麼就需要對運維工作進行標准化、自動化、架構優化、過程優化等。從面降低運維服務成本。其中,自動化最開始作為代替人工操作為出發點的訴求被廣泛研究和應用。
所謂自 動化運維,即在最少的人工干預下,結合運用腳本與第三方工具,保證業務系統7*24小時高效穩定運行 。這是所有業務系統運維的終極目標。
按照運維的發展成熟度來看, 運維大致可分為三個階段 :
(1)依靠純手工,重復地進行軟體的部署與運維;
(2)通過編寫腳本,方便地進行軟體的部署與運維;
(3)藉助第三方工具,高效地進行軟體的部署與運維;
二、自動化運維需要解決的問題
自動化運維通常來講,需要解決以下幾個問題: 自動部署配置、風險事前預警、故障事中解決、和故障事後管理 。
三、自動化運維的常用工具
自動化運維常用的工具包括以下幾種:
1、Ansible
ansible是基於Python開發的自動化運維工具,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。
ansible具有如下一些特性:
(1)模塊化:調用特定的模塊,完成特殊的任務。
(2)Paramiko(python對ssh的實現),PyYaml,jinja2(模塊語言)三個關鍵模塊。
(3)支持自定義模塊,可使用任何編程語言寫模塊。
(4)基於python語言實現。
(5)部署簡單,基於python和SSH(默認已安裝),agentless,無需代理不依賴KPI(無需SSL)。
(6)安全,基於OpenSSH
(7)冪等性:一個任務執行一次和執行n遍效果一樣,不因重復執行帶來意外情況。
(8)支持playbook編排任務,YAML格式,編排任務,支持豐富的數據結構。
(9)較強大的多層解決方案role。
2、Chef
Chef是一個功能強大的自動化工具,可以部署,修復和更新以及管理伺服器和應用程序到任何環境。
Chef 主要分為三個部分 Chef Server、Workstation 以及 Chef Client。用戶在 Workstation 上編寫 Cookbook。然後,通過 knife 命令上傳到 Chef Server。最後,在 Chef Client 上面實施安裝和部署工作。所以,對於 Cookbook 地編寫在整個自動化部署中起到了重要的作用。
Chef Server 包含所有配置數據,並存儲描述Chef-Client中每個Nodes的Recipe,Cookbook和元數據。配置詳細信息通過Chef-Client提供給Nodes。所做的任何更改都必須通過Chef Server進行部署。在推送更改之前,它通過使用授權密鑰來驗證Nodes和Workstations是否與伺服器配對,然後允許Workstations和Nodes之間進行通信。
Workstations 用於與Chef-server進行交互,還用於與Chef-nodes進行交互。它還用於創建Cookbook。Workstations是所有交互發生的地方,在這里創建,測試和部署Cookbook,並在Workstations中測試代碼。
Chef命令行工具 是創建,測試和部署Cookbook的地方,並通過此策略將其上載到Chef Server。
Knife 用於與ChefNodes進行交互。
Test Kitchen 用於驗證Chef代碼
Chef-Repo 是一個通過Chef命令行工具在其中創建,測試和維護Cookbook的存儲庫。
Nodes 由Chef管理,每個Nodes通過在其上安裝Chef-Client進行配置。 ChefNodes 是一台機器,例如物理雲,雲主機等。
Chef-Client 負責注冊和認證Nodes,構建Nodes對象以及配置Nodes。Chef-Client在每個Nodes上本地運行以配置該Nodes。
Cookbook 是Chef 框架的重要基礎功能之一。在 Chef Server 對目標機器做安裝部署的時候,是通過 Runlist。而 Runlist 裡面又包含了一個一個具體的 Cookbook,所以,最終對一個目標機器的部署任務就落到了 Cookbook 上。而對於 Cookbook 來說,其中包含了多個組件,我們可以將 Cookbook 簡單地理解成一個容器或者可以理解為一個包,裡麵包含了 recipes、files、templates、libraries、metadata 等信息。這些信息用於配置我們的目標機器。
3、Puppet
puppet是一種Linux、Unix平台的集中配置管理系統,所謂配置管理系統,就是管理其裡面諸如文件、用戶、進程、軟體包等資源。它可以運行在一台伺服器端,每個客戶端通過SSL證書連接到服務端,得到本機器的配置列表,然後根據列表來完成配置工作,所以如果硬體性能比較高,維護管理上千上萬台機器是非常輕松的,前提是客戶端的配置、伺服器路徑、軟體需要保持一致。
客戶端Puppet會調用本地facter,facter探測出該主機的常用變數,例如主機名、內存大小、IP地址等。然後Puppetd把這些信息發送到Puppet服務端;
Puppet服務端檢測到客戶端的主機名,然後會檢測manifest中對應的node配置,並對這段內容進行解析,facter發送過來的信息可以作為變數進行處理;
Puppet伺服器匹配Puppet客戶端相關聯的代碼才能進行解析,其他的代碼不解析,解析分為幾個過程,首先是語法檢查,然後會生成一個中間的偽代碼,之後再把偽代碼發給Puppet客戶端;
Puppet客戶端接收到偽代碼之後就會執行,執行完後會將執行的結果發送給Puppet伺服器;
Puppet服務端再把客戶端的執行結果寫入日誌。
4、Saltstack
SaltStack是基於python開發的一套C/S自動化運維工具。部署輕松,擴展性好,很容易管理上萬台伺服器,速度夠快。與伺服器之間的交流,以毫秒為單位。SaltStack提供了一個動態基礎設施通信匯流排用於編排,遠程執行、配置管理等等。它的底層使用ZeroMQ消息隊列pub/sub方式通信,使用SSL證書簽發的方式進行認證管理,傳輸採用AES加密。
在saltstack架構中伺服器端叫Master,客戶端叫Minion。
在Master和Minion端都是以守護進程的模式運行,一直監聽配置文件裡面定義的ret_port(接受minion請求)和publish_port(發布消息)的埠。當Minion運行時會自動連接到配置文件裡面定義的Master地址ret_port埠進行連接認證。
saltstack除了傳統的C/S架構外,其實還有一種叫做masterless的架構,其不需要單獨安裝一台 master 伺服器,只需要在每台機器上安裝 Minion端,然後採用本機只負責對本機的配置管理機制服務的模式。
saltstack提供如下一些功能:
(1)遠程執行:(批量執行命令)在master上執行命令時,會在所有的minion上執行。
(2)配置管理/狀態管理 :(描述想到達到的狀態,saltstack就會去執行)
(3)雲管理(cloud):用於管理雲主機
(4)事件驅動:被動執行,當達到某個值會自動觸發
這四種自動化運維工具的比較如下,現在主流的基本上ansible和saltstack用的多一些:
❸ Python編程能用在哪些方面
1、web開發:python的誕生歷史比web還要早,python是解釋型編程語言,開發效率高,非常適合進行web開發。它有上百種web開發框架,有很多成熟的模板技術,選擇python開發web應用,不但開發效率高,速度也是非常快的。常用的web開發框架有:Django、Flask、Tornado 等。
2、網路爬蟲:網路爬蟲是python非常常見的一個場景,國際上其實google在早期大量地使用Python語言作為網路爬蟲的基礎,推動python發展,以前國內很多人採集網上的內容,現在就可以用python來實現了。
3、人工智慧:人工智慧是非常火的一個方向,AI浪潮讓python語言未來充滿潛力。現在python有很多庫都是針對人工智慧的,比如numpy,
scipy做數值計算的,sklearn做機器學習的,pybrain做神經網路等。在人工智慧領域,數據分析、機器學習、神經網路、深度學習等都是主流語言。
4、數據分析:數據分析處理方面,python有非常完備的生態環境。大數據分析涉及到分布式計算、數據可視化、資料庫操作等,python都有成熟的模板可以完成其功能,對於Hadoop-MapRece和Spark,都可以直接使用Python完成計算邏輯,是非常便利的。
5、自動化運維:python對於伺服器是非常重要的,目前幾乎所有Linux發行版本中都帶有python編輯器,使用python腳本進行批量化文件部署和運行調整都成了Linux伺服器很不錯的選擇。python有很多方便的工具,比如說調控ssh/sftp用的paramiko,到監控服務用的supervisor等,讓運維變得更加簡單。
❹ python ssh登錄網管後繼續ssh登錄其它機器,咋寫接下來的代碼
1. 建議使用python+fabric
2. B到A可以使用 scp命令,或者使用ftp命令上傳
3. 可以網路下「python fabric」
❺ python的paramiko模塊 支持連接交換機嗎
paramiko使用
paramiko模塊是基於python實現了SSH2遠程安全連接,支持認證和密鑰方式,可以實現遠程連接、命令執行、文件傳輸、中間SSH代理功能
安裝
pip install paramiko
或 easy_install paramiko
paramiko依賴第三方的Crypto,Ecdsa和pyhton-devel,所以需要安裝
paramiko核心組件
SSHClient類
SSHClient類是SSH服務會話的高級表示,該類實現了傳輸、通道、以及SFTP的校驗、建立的方法
connect 方法
connect方法實現了遠程ssh連接並作校驗
hostname 連接的目標主機
port=SSH_PORT 指定埠
username=None 驗證的用戶名
password=None 驗證的用戶密碼
pkey=None 私鑰方式用於身份驗證
key_filename=None 一個文件名或文件列表,指定私鑰文件
timeout=None 可選的tcp連接超時時間
allow_agent=True, 是否允許連接到ssh代理,默認為True 允許
look_for_keys=True 是否在~/.ssh中搜索私鑰文件,默認為True 允許
compress=False, 是否打開壓縮
sock=None,
gss_auth=False,
gss_kex=False,
gss_deleg_creds=True,
gss_host=None,
banner_timeout=None
參數
exec_command方法
遠程執行命令的方法,該命令的輸入與輸出流為標准輸入、標出輸出、標准錯誤輸出
command 執行的命令
bufsize=-1 文件緩沖區大小
timeout=None
get_pty=False
參數
load_system_host_key方法
夾在本地公鑰文件,默認為~/.ssh/known_hosts
filename=None 指定本地公鑰文件
參數
set_missing_host_key_policy方法
設置連接的遠程主機沒有本地主機密鑰或HostKeys對象時的策略,目前支持三種:用法:
set_missing_host_key_policy(paramiko.AutoAddPolicy())AutoAddPolicy 自動添加主機名及主機密鑰到本地HostKeys對象,不依賴load_system_host_key的配置。即新建立ssh連接時不需要再輸入yes或no進行確認
WarningPolicy 用於記錄一個未知的主機密鑰的python警告。並接受,功能上和AutoAddPolicy類似,但是會提示是新連接
RejectPolicy 自動拒絕未知的主機名和密鑰,依賴load_system_host_key的配置。此為默認選項
from_transport(cls,t) 創建一個已連通的SFTP客戶端通道
put(localpath, remotepath, callback=None, confirm=True) 將本地文件上傳到伺服器 參數confirm:是否調用stat()方法檢查文件狀態,返回ls -l的結果
get(remotepath, localpath, callback=None) 從伺服器下載文件到本地
mkdir() 在伺服器上創建目錄
remove() 在伺服器上刪除目錄
rename() 在伺服器上重命名目錄
stat() 查看伺服器文件狀態
listdir() 列出伺服器目錄下的文件
SFTPClient類
SFTPCLient作為一個sftp的客戶端對象,根據ssh傳輸協議的sftp會話,實現遠程文件操作,如上傳、下載、許可權、狀態
遠程連接並執行命令
實現遠程連接主機,並執行命令,同時記錄日誌
* 直接驗證方式