如何用python开发一个ssh客户端工具

如何用python开发一个ssh客户端工具,第1张

1)通过paramiko的ssh模块连接指定主机;

2) 通过SSHClient.exec_command在远程主机上执行命令

3)通过exec_command返回的stdout,stdin,stderr进行交互;

4)保存成功连接的主机信息(session),可以通过ls命令查看, session id命令,直接启动新连接;

5)可在windows和linux下运行,写程序时需要注意他们的差别。

代码ssh.py

#!/usr/bin/python

# -*- coding: 颤咐闷utf-8 -*-

 

import os,sys

import paramiko  

import threading  

import platform

 

curr_ssh = None 

curr_prompt = ">>"

 

#使用说明       

def printUsage():

    print "    !ls                     :list sessions."

    print "    !session id             :connect session."

    print "    !conn host user password:connect host with user."

    print "    !exit                   :exit."

 

#连接 

def conn(ip,username,passwd):

    try:

        简禅ssh = paramiko.SSHClient()  

        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  

        ssh.connect(ip,22,username,passwd,timeout=5)  

        print "Connect to ",ip," with ",username

        global curr_prompt

        curr_prompt=username+"@"+ip+">>"

        return ssh

    except:

        return None

         

#加载以前的连接信息

sessions=[]

def loadSessions():

    global sessions

    try:

        f = open("sessions")

        sessions = f.readlines()

        f.close()

    except:

        pass

 

#执行本地命令,ssh.py的命令       

def exe_cmd_local(cmd):

    if(cmd == "!ls"):

        loadSessions()

        global sessions

        i=0

        print "Sessions:"

        for s in sessions:

            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]+"\n"="" 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="">

新增1.实现hibernate自动创建数据表。 

部分重要代码

<prop key="hibernate.hbm2ddl.auto">

    create</prop> <class name="com.sqt.bean.User" table="tb_Users" schema="db_hibernate"> 

    <id name="id" type="int" column="ID">

        <generator class="increment"></generator>

    </id>

    <property name="firstName" column="firstName" type="string"></property>

    <property name="lastName" column="lastName" type="string"></property>

    <property name="age" column="age" type="int"></property>

    </class>

新增2.优化查找功能 

查找功能在原先的代码中有的。但是返回的是user对象。我对它进行优化后,直接返回list,和查找全部对象的方法一样,当action返回SUCCESS时,<result name="success">/list.jsp</result>

@Override

public List<User> findUserById(int id) {

    // TODO Auto-generated method stub

    System.out.println("-------UserDaoImp.findUserById-----------"+id)

    String hql = "from User u where u.id=:id order by u.id asc"

    Query query=getSession().createQuery(hql)

    query.setInteger("id", id)

    List<User> list =query.list()

    return list

这个是spring的注入机制,不用new 就可以调用, 那个直接跑到接口里了,没有实现方法,接口本身就不能在接口里实现的,你要找到对应的实现类,具仔源体的方法体在实现类中,如果你使用的是eclipse 你可以按住ctrl鼠标点进那个接口里,选中方法名,然后按住ctrl+t 就会找到实现类在下面。点击去就是了。至于是怎么依赖到那个类的,你看看项目中肯定有一个缺或applicationContext.xml类似这样的文件,仔细看看那个文件你就能找到这个类注入念扮态的接口指向哪个实现类了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12400058.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存