導航:首頁 > 編程語言 > pythonssh傳數據

pythonssh傳數據

發布時間:2023-07-07 14:24:26

⑴ 如何python3.4使用pexpect來實現SSH登陸

Pexpect 是 Don Libes 的 Expect 語言的一個 Python
實現,是一個用來啟動子程序,並使用正則表達式對程序輸出做出特定響應,以此實現與其自動交互的 Python 模塊。 Pexpect
的使用范圍很廣,可以用來實現與 ssh、ftp 、telnet
等程序的自動交互;可以用來自動復制軟體安裝包並在不同機器自動安裝;還可以用來實現軟體測試中與命令行交互的自動化。

在shell裡面用過pexpect的人,相信都會很熟悉這種工具,pexpect是expect的python的一個實現,利用python來操作某些互動式的自動化任務是非常方便的。

如何在linux下安裝?
1,使用wget https://pypi.python.org/pypi?:action=show_md5&digest= 下載
2,使用tar -zxvf pexpect-3.3.tar.gz解壓
3,使用python setup.py install進行安裝
ok,上面的步驟,執行完成之後,我們就可以來寫個demo測試一下了,另外注意兼容問題,散仙的python是3.4,所以要下載支持python3.4的pexpect,如果你的python版本是2.x那麼就要下載2.x的pexpect來使用。
下面是散仙模擬SSH登陸一台機器並列印磁碟情況,然後退出的例子:
#!/usr/local/python3.4/bin/python3.4
import pexpect
ip="192.168.46.22"
name="root"
pwd="abc"
#發送命令執行交互
child=pexpect.spawn('ssh %s@%s' % ("root",ip) )
#
child.expect ('password:')
child.sendline(pwd)
child.expect('$')
child.sendline('df -h')
#發送命令
child.sendline("exit")
child.interact()
#關閉pexpect
child.close()

執行結果如下:
Last login: Wed Oct 22 18:35:08 2014 from 192.168.46.31
exit[root@ganglia ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_ganglia-lv_root 30G 3.6G 25G 13% /
tmpfs 495M 0 495M 0% /dev/shm
/dev/sda1 485M 32M 428M 7% /boot
[root@ganglia ~]# exit
logout
Connection to 192.168.46.22 closed.
[root@master 2012]#
本文只是一個簡單的例子,可能覺得沒有必要使用python來完成,但當系統管理規模一旦大起來的話,使用python來自動化管理是非常輕松的一件事。

⑵ 純干貨!python 在運維中的應用 (一):批量 ssh/sftp

日常工作中需要大量、頻繁地使用ssh到伺服器查看、拉取相關的信息或者對伺服器進行變更。目前公司大量使用的shell,但是隨著邏輯的復雜化、腳本管理的精細化,shell已經不滿足日常需求,於是我嘗試整合工作中的需求,製作適合的工具。 由於管理制度的缺陷,我以工作流程為核心思考適合自己的運維方式,提升工作效率,把時間留給更有價值的事情。 完整代碼在最後,請大家參考。

生產:4000+物理伺服器,近 3000 台虛擬機。

開發環境:python3.6、redhat7.9,除了paramiko為第三方模塊需要自己安裝,其他的直接import即可。

批量執行操作是一把雙刃劍。批量執行操作可以提升工作效率,但是隨之而來的風險不可忽略。

風險案例如下:

掛載很多數據盤,通常先格式化硬碟,再掛載數據盤,最後再寫入將開機掛載信息寫入/etc/fstab文件。在批量lsblk檢查硬碟信息的時候發現有的系統盤在/sda有的在/sdm,如果不事先檢查機器相關配置是否一致直接按照工作經驗去執行批量操作,會很容易造成個人難以承受的災難。

在執行批量操作時按照慣例:格式化硬碟->掛載->開機掛載的順序去執行,假設有的機器因為某些故障導致格式化硬碟沒法正確執行。在處理這類問題的時候通常會先提取出失敗的ip,並再按照慣例執行操作。運維人員會很容易忽略開機掛載的信息已經寫過了,導致復寫(這都是血和淚的教訓)。

所以,為了避免故障,提升工作效率,我認為應當建立團隊在工作上的共識,應當遵守以下原則:

當然,代碼的規范也應當重視起來,不僅是為了便於審計,同時也需要便於溯源。我認為應當注意以下幾點:

1、ssh no existing session,sftp超時時間設置:

在代碼無錯的情況下大量ip出現No existing session,排查後定位在代碼的寫法上,下面是一個正確的示例。由於最開始沒考慮到ssh連接的幾種情況導致了重寫好幾遍。另外sftp的實例貌似不能直接設置連接超時時間,所以我採用了先建立ssh連接再打開sftp的方法。

2、sftp中的get()和put()方法僅能傳文件,不支持直接傳目錄:

不能直接傳目錄,那換個思路,遍歷路徑中的目錄和文件,先創建目錄再傳文件就能達到一樣的效果了。在paramiko的sftp中sftp.listdir_attr()方法可以獲取遠程路徑中的文件、目錄信息。那麼我們可以寫一個遞歸來遍歷遠程路徑中的所有文件和目錄(傳入一個列表是為了接收遞歸返回的值)。

python自帶的os模塊中的os.walk()方法可以遍歷到本地路徑中的目錄和文件。

3、多線程多個ip使用sftp.get()方法時無法並發。

改成多進程即可。

4、多個ip需要執行相同命令或不同的命令。

由於是日常使用的場景不會很復雜,所以借鑒了ansible的playbook,讀取提前准備好的配置文件即可,然後再整合到之前定義的ssh函數中。


同時,我們還衍生出一個需求,既然都要讀取配置,那同樣也可以提前把ip地址准備在文件里。正好也能讀取我們返回的執行程序的結果。

參數說明:

密碼認證:

公鑰認證:

可以配合 grep,awk 等命令精準過濾。

個人認為 Python 在初中級運維工作中的性質更像是工具,以提升工作效率、減少管理成本為主。可以從當前繁瑣的工作中解脫出來,去 探索 更有價值的事情。python 本質上並不會減少故障的產生,所以在不同的階段合理利用自身掌握的知識解決當前最重要的痛點,千萬不要本末倒置。

⑶ 如何用python開發一個ssh客戶端工具


1)通過paramiko的ssh模塊連接指定主機;

2)通過SSHClient.exec_command在遠程主機上執行命令;

3)通過exec_command返回的stdout,stdin,stderr進行交互;

4)保存成功連接的主機信息(session),可以通過ls命令查看,sessionid命令,直接啟動新連接;

5)可在windows和linux下運行,寫程序時需要注意他們的差別。
代碼ssh.py

#!/usr/bin/python
#-*-coding:utf-8-*-

importos,sys
importparamiko
importthreading
importplatform

curr_ssh=None
curr_prompt=">>"

#使用說明
defprintUsage():
print"!ls:listsessions."
print"!sessionid:connectsession."
print"!connhostuserpassword:connecthostwithuser."
print"!exit:exit."

#連接
defconn(ip,username,passwd):
try:
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22,username,passwd,timeout=5)
print"Connectto",ip,"with",username
globalcurr_prompt
curr_prompt=username+"@"+ip+">>"
returnssh
except:
returnNone

#載入以前的連接信息
sessions=[]
defloadSessions():
globalsessions
try:
f=open("sessions")
sessions=f.readlines()
f.close()
except:
pass

#執行本地命令,ssh.py的命令
defexe_cmd_local(cmd):
if(cmd=="!ls"):
loadSessions()
globalsessions
i=0
print"Sessions:"
forsinsessions:
print"[%d]%s"%(i,s)
i+=1
else:
vals=cmd.split('')
if(vals[0]=="!session"):
id=(int)(vals[1])
if(id<len(sessions)):os_name="platform.system()"new_console_cmd=""if(os_name="=""linux"):="".=""ssh.py="""=""+=""sessions[id]+"""=""elif(os_name="=""windows"):=""sessions[id]=""os.system(new_console_cmd)=""else:=""print="""didn't=""hava=""sessoin=""",vals[1]=""elif(vals[0]="="!conn"):"global=""curr_ssh=""f="open("sessions","a")"line="vals[1]+"""+vals[2]+"="""+vals[3]+" "=""f.write(line)=""f.close()=""#在ssh連接的主機上執行命令=""def=""exe_cmd_ssh(ssh,cmd):=""if(ssh="="none):=""connect=""to=""a=""server.=""use=""'!conn'=""please."=""return=""stdin,=""stdout,=""stderr="ssh.exec_command(cmd)"#stdin.write("y")=""#簡單交互,輸入=""『y』=""#屏幕輸出=""stdout.read()=""stderr.read()=""#入口函數=""if=""__name__="='__main__':"loadsessions()=""if(len(sys.argv)="=4):"printusage()=""while=""true:=""cmd="raw_input(curr_prompt)"if(len(cmd)="=0):"continue=""if(cmd="=""!exit"):=""if(curr_ssh=""!="None):"curr_ssh.close();=""break=""if(cmd[0]="="'!'):=""exe_cmd_local(cmd)=""exe_cmd_ssh(curr_ssh,cmd)<=""pre="">

⑷ 請教個python執行ssh命令的問題

各位我現在想用python寫個ssh登陸的腳本 現在遇見一個問題就是我不太清楚python如何進行變數替換的(機器間已做好ssh互認)

1.1.1.1是我的時間伺服器
比如說beijing_IP 裡面有兩個IP
1.1.1.2
1.1.1.3

import os
IP_FILE=open('/home/cetvuser/beijing_IP','r')
LINES=IP_FILE.readlines()
for i in LINES:
i=i.strip()
os.system("ssh i;ntpdate 1.1.1.1") 這個地方應該怎麼寫?
IP_FILE.close()

報錯內容如下:
[root@xxx]# ./time.py
ssh: i: Name or service not known
25 Apr 11:42:13 ntpdate[7975]: no server suitable for synchronization found
ssh: i: Name or service not known
25 Apr 11:42:17 ntpdate[7979]: no server suitable for synchronization found
ssh: i: Name or service not known

變數替換,看你要在哪裡替換。給你一個簡單的例子。

⑸ 怎麼用python向sqlserver中導入數據

import pymssql

conn = pymssql.connect(..)
curr = conn.cursor()

curr.executemany("insert into thetable values (%s, %s)", result)
conn.commit()

curr.close()
conn.close()

⑹ 用python里paramiko的sftp模塊在交換機上把配置文件上傳到windows電腦,報錯

paramiko使用paramiko模塊是基於python實現了SSH2遠程安全連接,支持認證和密鑰方式,可以實現遠程連接、命令執行、文件傳輸、中間SSH代理功能安裝pip install paramiko
或 easy_install paramiko
paramiko依賴第三方的Crypto,Ecdsa和pyhton-devel,所以做轎需要安裝
paramiko核心組件SSHClient類SSHClient類是SSH服務會話的高級表示,該類實現了傳輸、通道、以及SFTP的校驗、建立的方法

閱讀全文

與pythonssh傳數據相關的資料

熱點內容
源碼微信小程序搭建 瀏覽:278
linux遠程桌面連接命令 瀏覽:859
adams教程pdf 瀏覽:264
Arm和單片機區別 瀏覽:559
阿里雲伺服器綁定主機頭 瀏覽:949
游戲手機什麼最好用安卓 瀏覽:11
江蘇程序員怎麼樣 瀏覽:510
捉妖股選股公式源碼 瀏覽:541
勝利油田的社保用什麼app 瀏覽:460
lru演算法java 瀏覽:129
數據分析系統源碼 瀏覽:539
論語繁體pdf 瀏覽:517
直上指標源碼 瀏覽:193
pythongeohash使用 瀏覽:348
二維熱力圖python 瀏覽:553
如何度過程序員菜鳥階段 瀏覽:505
python子圖標題顯示不出來 瀏覽:538
linux怎麼看連接伺服器的ip 瀏覽:709
windows命令行copy 瀏覽:65
都勻工會卡綁定什麼購物App 瀏覽:274