python3使用paramiko

jopen 10年前發布 | 42K 次閱讀 Python開發 Python3

要在python3中使用paramiko得先安裝Crypto和 ecdsa這兩個包,linux 要好安裝點,windows下也一樣不過可以去下Crypto編譯好的for python3的EXE安裝即可, 我就是沒有安裝ecdsa到導安裝后import paramiko時出現ecdsa 和util這兩個錯誤,重新安裝了一下paramiko后就可以了。

myssh.py -h 127.0.0.1 -p 22 -u root -m password "df -h"

myssh.py df -h

如果只有不想輸參數的話,可以改文本,寫在里面了,改了就可以。

# coding:utf-8
# author:lenglingx
import paramiko
import sys
import getopt

#default content argments
HOST = "192.168.1.196"
PORT = 22
USER = "root"
PASSWD = "PASSWORD"
CMD = "ls -l"
#

if len(sys.argv) < 2:
    print("user : -hlocalhost -pport -uuser -mpasswd progamment argv!!")
    exit(0)

#
args = sys.argv[1:]
distakv ={}

print("agrs:%s"%(args))
arglist,argar = getopt.getopt(args,"h:p:u:m:")

print("arglist:%s , argar:%s"%(arglist,argar))

print("*" * 70)
print("開始參數處理:")
for i in range(len(arglist)) :
    print("%s => %s "%(arglist[i][0],arglist[i][1]))
    distakv.setdefault(arglist[i][0],arglist[i][1])

for k in range(len(argar)) :
    print("argar[%d]:%s "%(k,argar[k]))

if len(argar) == 0 :
    pass
else :
    CMD = " ".join(argar)

print("cmd: %s"%(CMD))

print("*" * 70)
print("參數處理結束:")

if "-h" in distakv.keys() :
    print("我們開始做 -h ,其值為: %s"%(distakv.get("-h")) )
    HOST = distakv.get("-h")
    print("host: %s"%(HOST))
if "-p" in distakv.keys() :
    print("我們開始做 -p ,其值為: %s"%(distakv.get("-p")) )
    PORT = int(distakv.get("-p"))
    print("port: %s"%(PORT))
if "-u" in distakv.keys() :
    print("我們開始做 -u ,其值為: %s"%(distakv.get("-u")) )
    USER = distakv.get("-u")
    print("user: %s"%(USER))
if "-m" in distakv.keys() :
    print("我們開始做 -m ,其值為: %s"%(distakv.get("-m")) )
    PASSWD = distakv.get("-m")
    print("passwd: %s"%(PASSWD))

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(HOST,PORT,USER,PASSWD)
stdin,stdout,stderr = ssh.exec_command(CMD)
result = stdout.read()
print("*" * 35 ,"結果","*" * 35)
print(result)


下面是執行結果:

D:\Python33\progs>argtest3.py ping -c 4 8.8.8.8
agrs:['ping', '-c', '4', '8.8.8.8']
arglist:[] , argar:['ping', '-c', '4', '8.8.8.8']
**********************************************************************
開始參數處理:
argar[0]:ping
argar[1]:-c
argar[2]:4
argar[3]:8.8.8.8
cmd: ping -c 4 8.8.8.8
**********************************************************************
參數處理結束:
*********************************** 結果 ***********************************
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=46 time=77.7 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=46 time=74.6 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=46 time=75.1 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=46 time=76.0 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3085ms
rtt min/avg/max/mdev = 74.649/75.897/77.748/1.197 ms

下面這個是IP地址,端口,用戶,密碼,然后加命令的這種 

 

D:\Python33\progs>argtest3.py -h192.168.1.196 -p22 -uroot -proot__ df -h
agrs:['-h192.168.1.196', '-p22', '-uroot', '-proot__', 'df', '-h']
arglist:[('-h', '192.168.1.196'), ('-p', '22'), ('-u', 'root'), ('-p', 'monitor')
] , argar:['df', '-h']
**********************************************************************
開始參數處理:
-h => 192.168.1.196
-p => 22
-u => monitor
-m => monitor
argar[0]:df
argar[1]:-h
cmd: df -h
**********************************************************************
參數處理結束:
我們開始做 -h ,其值為: 192.168.1.196
host: 192.168.1.196
我們開始做 -p ,其值為: 22
port: 22
我們開始做 -u ,其值為: monitor
user: monitor
我們開始做 -m ,其值為: monitor
passwd: monitor *********************************** 結果 ***********************************
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                      6.5G  989M  5.2G  16% /
tmpfs                 246M     0  246M   0% /dev/shm
/dev/sda1             485M   32M  429M   7% /boot



 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!