1. python 實現ssh的執行遠端命令和scp的不同機器文件傳輸功能
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pexpect
def ssh_cmd(ip, passwd, cmd):
ret = -1
ssh = pexpect.spawn('ssh root@%s "%s"' % (ip, cmd))
try:
i = ssh.expect(['password:', 'continue connecting (yes/no)?'], timeout=5)
if i == 0 :
ssh.sendline(passwd)
elif i == 1:
ssh.sendline('yes\n')
ssh.expect('password: ')
ssh.sendline(passwd)
ssh.sendline(cmd)
r = ssh.read()
print r
ret = 0
except pexpect.EOF:
print "EOF"
ssh.close()
ret = -1
except pexpect.TIMEOUT:
print "TIMEOUT"
ssh.close()
ret = -2
return ret
利用pexpect模塊我們可以做很多事情,由於他提供了自動交互功能,因此我們可以實現ftp,telnet,ssh,scp等的自動登錄,還是比較實用的。根據上面的代碼相信讀者已經知道怎麼實現了(python就是那麼簡單!)。
用
上面的代碼去完成任務還是比較費時間的,因為程序要等待自動交互出現,另外ubuntu用ssh連接就是比較慢,要進行一系列的驗證,這樣才體現出ssh
的安全。我們要提高效率,在最短的時間內完成。後來我發現了python裡面的paramiko模塊,用這個實現ssh登錄更加簡單。看下面的代碼:
復制代碼 代碼如下:
#-*- coding: utf-8 -*-
#!/usr/bin/python
import paramiko
import threading
def ssh2(ip,username,passwd,cmd):
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22,username,passwd,timeout=5)
for m in cmd:
stdin, stdout, stderr = ssh.exec_command(m)
# stdin.write("Y") #簡單交互,輸入 『Y'
out = stdout.readlines()
#屏幕輸出
for o in out:
print o,
print '%s\tOK\n'%(ip)
ssh.close()
except :
print '%s\tError\n'%(ip)
if __name__=='__main__':
cmd = ['cal','echo hello!']#你要執行的命令列表
username = "" #用戶名
passwd = "" #密碼
threads = [] #多線程
print "Begin......"
for i in range(1,254):
ip = '192.168.1.'+str(i)
a=threading.Thread(target=ssh2,args=(ip,username,passwd,cmd))
a.start()
上面的程序還是有些技巧的:
1.
利用多線程,同時發出登錄請求,同時去連接電腦,這樣速度快很多,我試了一下,如果不用多線程,直接一個一個挨著執行的話,大約5~10秒鍾才能對一台電
腦操作完,具體時間要根據命令的來決定,如果是軟體安裝或者卸載時間要更長一些。這樣下來怎麼也要一二十分鍾,用多線程後就快多了,所有的命令執行完用了
不到2分鍾!
2.最好用root用戶登錄,因為安裝或者卸載軟體的時候如果用普通用戶又會提示輸入密碼,這樣又多了一次交互,處理起來就比較麻
煩!安裝軟體時apt-get install xxx
最好加上「-y」參數,因為有時安裝或刪除軟體時提示是否繼續安裝或卸載,這又是一次自動交互!加上那個參數後就沒有人機交互了。
3. 循環時循環所有ip,因為計算機的ip是路由器自動分配的,保險起見,最好全部都執行,保證沒有遺漏的主機
4.遠端執行命令時如果有交互,可以這樣用 stdin.write("Y")來完成交互,「Y」就是輸入「Y」。
5.把所有的命令放到一個列表裡面,遍歷列表可以依次執行列表裡面的命令
6.為了更好的進行控制,最好在電腦上提前把root用戶打開,裝好ssh伺服器並讓其開機自動執行。
2. 如何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來自動化管理是非常輕松的一件事。
3. python如何通過串口SSH登錄伺服器
需要寫一個基於串口通信協議的ssh伺服器和客戶端,伺服器部署到linux上,客戶端在windows上;
其次,客戶端要提供sdk for python;
最後,你就可以用python通過ssh登錄linux了。
4. 請教下python3 上如何實現級聯ssh
首先,我的windows系統上有python2和python3。使用下面命令切換到python3:
activate py3
1
接著使用下面命令下載相關模塊:
pip install ecdsa
pip install Crypto
pip install paramiko
1
2
3
連接伺服器操作:
# -*- coding: utf-8 -*-
import paramiko
# 伺服器相關信息,下面輸入你個人的用戶名、密碼、ip等信息
ip = ""
port = 22
user = ""
password = ""
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 建立連接
ssh.connect(ip,port,user,password,timeout = 10)
#輸入linux命令
stdin,stdout,stderr = ssh.exec_command("pwd")
# 輸出命令執行結果
result = stdout.read()
print(result)
#關閉連接
ssh.close()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
如下,運行該程序,可以看到控制台輸出的結果:
5. python怎麼安裝ssh模塊
Python中使用SSH需要用到OpenSSH,而OpenSSH依賴於paramiko模塊,而paramiko模塊又依賴於pycrypto模塊,因此要在Python中使用SSH,則需要先安裝模塊順序是:pycrypto -> ecdsa -> paramiko 在這里我只想教你有網的情況下在線安裝,進入
C:\Python27\Lib\site-packages 目錄(註:這個目錄是所有的第三方 模塊安裝的目錄)在在文件目錄直接輸入:cmd #進入命令模式,輸入以下三個命令就可以了。
pip install pycrypto
pip install ecdsa
pip install paramiko
註:cmd 目錄一定要對,希望能解決你的問題,若要離線安排要下載以上三個包。
6. 使用python 實現SSH登錄設備時出現問題
解決了啊,不過不是用的
stdin,stdout,stderr=client.exec_command('show arp;show clock')
用這種方法只能弄一條命令
用下面這個
chan= client.invoke_shell()
chan.send('en\n')
chan.send("password\n")
chan.send('show log\n')
result = chan.recv(100000).decode()
用了這個可能還有別的問題,試試吧,不行再討論
7. 如何使用ssh windows python
ws中使用的Pycrypto版本,
下載Python版本和操作系統對應的版本,直接安裝即可。
註:如果是Win32bit + Python 2.7,則下載pycrypto-2.6.win32-py2.7.exe。
安裝Paramiko模塊
解壓縮後,進入到解壓縮的目錄中執行python setup.py install進行安裝。
使用示例
使用SSH登陸到遠程主機執行命令。
import paramiko
def ssh_cmd(ip,port, cmd, user, passwd):
result = ""
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, port, user, passwd,timeout=3)
stdin, stdout, stderr =ssh.exec_command(cmd)
result = stdout.read()
ssh.close()
except:
print("ssh_cmd err.")
return result
8. 請教個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
變數替換,看你要在哪裡替換。給你一個簡單的例子。
os.system('ssh %s'%(ip))
復制代碼
9. 求教,python3怎麼通過SSH隧道連接mysql資料庫並執行SQL操作
python3發布以來,獲取了廣大程序員們的差評,說不穩定,又是不兼容什麼的,不過差評歸差評,python3既然已經發布,肯定是個趨勢,但在python3.4裡面,使用原來python2.7的mysqldb已經不能連接mysql資料庫了,比較令人糾結,不過我們可以使用pymysql,來完成連接mysql的重任,步驟如下:序號描述1去github上下載pymysql的安裝包pymysql2解壓到某個盤符下3打開cmd窗口(win環境下),進入pymysql的根目錄下執行命令,pythonsetup.pyinstall4在程序里,導入pymysql5開始連接資料庫資料庫操作的API文檔連接:代碼如下:__author__='qindongliang'#導入pymysql的包importpymysqltry:#獲取一個資料庫連接,注意如果是UTF-8類型的,需要制定資料庫conn=pymysql.connect(host='localhost',user='root',passwd='qin',db='person',port=3306,charset='utf8')cur=conn.cursor()#獲取一個游標cur.execute('select*fromperson')data=cur.fetchall()fordindata:#注意int類型需要使用str函數轉義print("ID:"+str(d[0])+'名字:'+d[1]+"性別:"+d[2])cur.close()#關閉游標conn.close()#釋放資料庫資源exceptException:print("發生異常")結果如下:D:\python\python.exeD:/pythonide/pythonprojectworkspace/python/mysql.pyID:1名字:秦天性別:男ID:2名字:王晶性別:女Processfinishedwithexitcode0
10. 如何使用Python 自動執行連接ssh後並執行Oracle查詢語句並返回查詢結果
可以使用paramiko模塊,這個模塊就是python實現的高效ssh客戶端,用它連接遠程伺服器後,就可以使用裡面的函數來執行Oracle語句,返回結果可以保存為列表,然後列印出來就可以了,你可以嘗試一下,這里就不給出具體的代碼了。