python3使用paramiko
jopen
11年前
要在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