python3使用paramiko

要在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



 

你可能感兴趣的:(python3使用paramiko)