GWA2Python Kiwa Rabbit的改进及回答为什么需要软件开发框架
在2022年9月份的更新中,我们发布了 GWA2 in Python的初始预览版本。目前该版本正在不断功能完善与改进中,即将发布生产就绪版本。在之前的Blog中,我们绘制了 GWA2 Python中的
顺晟科技
2022-11-29 09:34:48
69
前言:不久前收到了要求。必须将远程服务器ssh到项目中并运行脚本。最重要的是,在Java程序中找到支持SSH的工具,然后找到JSch。另一个是SSH2,但连接失败。
JSch正文只是JSch的简单用法。要了解更多信息,可以访问主页链接http://www.jcraft.com/jsch/。
以下是SSH2的纯JSch实现JSch的正式介绍。这样,您就可以连接到sshd服务器,使用端口转发、X11转发、文件传输等。可以将它的功能集成到自己的Java程序中。JSch使用BSD样式许可证。
接下来,我们使用JSch。
1.添加相关性
相依性groupid com . jcraft/groupid artifactid JSch/artifactid version 0 . 1 . 54/version/dependency 2,jsch连线伺服器
JSch连接服务器的主要步骤如下
1.创建jsch对象2、创建会话3、设置会话配置4、使用connect方法连接。
实现原则
1.根据远程主机的internet协议(internet协议)地址、用户名和端口建立会话(会话)。2.设置用户信息(包括密码和Userinfo)并连接到会话。注:getSession()仅创建一个会话,因此必须在调用连接()之前设置必要的验证信息,然后才能建立连接。设置会议中指定类型的频道(频道)。4.设置需要在通道上远程运行的shell脚本并连接通道后,可以远程运行shell脚本。注意:使用通道之前,必须通过调用连接()进行连接。5.读取远程执行shell脚本的输出,并依次断开通道和会议的连接。写了一个简单的例子。下面/* * *连接服务器并发出shell命令* @param主机IP * @param端口端口端口* @param用户名用户名* @param密码* @ param CMD shell命令* @ return *//设置密码session.setPassword(密码);//创建会议配置类属性sshconfig=new properties();//跳过公钥检测ssh配置。Put(' StrictHostKeyChecking ',' no ');绘画。配置设置(ssh配置);//也可以设置超时会话。settime out(session _ time out);//建立连接会话。connect();//会话建立后,可以运行shell命令或上载下载文件。shell命令通道执行=(通道执行)会话。开放频道(“exec”);//通过将shell传递到命令通道来执行。设置命令(cmd);//开始运行通道控制器。connect();//获取运行结果的输入流inputStream=通道运行。getinputstream();字符串结果=null buffered reader in=new buffered reader(new inputstream reader(inputstream));While ((result=in.readLine())!=null) {resultLines.add(结果);LOGGER.info('命令返回信息:{} ',结果);}} catch(异常e){ logger。错误(“连接失败,{}”,e . get message());ArrayList字符串错误msg=new ArrayList();错误信息。add(e . get message());返回errorMsg}最后一个{//释放资源if (channelExec!=null){ try {channel exec。disconnect();} catch(例外e){ logger。错误(' JSch通道断开连接错误:',e);}}如果(会话!=空){try {会话。disconnect();} catch(例外e){ logger。错误(' JSch会话断开连接错误:',e);}} if (inputStream!=null){ try {inputstream。关闭();} catch(异常e){ logger。错误(“inputStream退出错误:”,e);}}}返回结果行。}我输入“残疾人”外壳命令,就可以查看控制台日志中打印的结果
通道通道类型JSch常用的通道通道通道类型有三种:ChannelShell、ChannelExec和ChannelSftp
ChannelShell、ChannelExec用于执行命令
ChannelSftp用于上载下载文件
通道外壳和ChannelExec的区别在于,在启动channel.connect()之前,请导入输出流和输入流,然后输出流发送命令,在通道内读取命令结果(注意,发送命令后,在读取命令之前需要等一会儿)。与登录伏特加的信息一样,执行命令后,任何信息都将通过水路返回到客户端,执行命令后可能只需要结果。所以,后者,非互动的,一次执行一个命令。
演示上载和下载/* * *文件上载* @param会话会话* @param目录上载目录* @param文件名上载文件名* @param uploadFile要上载的文件*/public boolean upload * *请尝试channels FTP channels FTP=null { channel FTP=(channel FTP)会话。开放通道(“sftp”);通道FTP。connect();LOGGER.info('开始上传通道文件!'));ChannelSftp.cd(目录);File inputstream=新文件输入流(upload file);通道FTP。Put(文件输入流,文件名);返回True} catch(异常e){ logger。错误(“SFTPClient文件上载失败,{}”、e.getMessage()、e);False}最后一个{if (fileInputStream!=null){ try {file inputstream。关闭();} catch(异常e){ logger。错误(“文件输出流关闭错误,”,e);}} if(通道FTP!=空){通道FTP。disconnect();}}}/* * *下载文件* @param会话会话会话* @param目录下载目录* @param文件名下载的文件名* @param saveFile本地路径*/公共文件下载(Session Session)开放通道(“sftp”);频道FTP。connect();ChannelSftp.cd(目录);文件文件=新文件(保存文件);如果(文件。exists(){文件。删除();}文件输出流=新文件输出流(文件);ChannelSftp.get(文件名、文件输出流);返回文档} catch(异常e){ logger。错误(“SFTPClient文件下载失败,{}”、e.getMessage()、e);空}最后一个{if(文件输出流!=null){尝试{文件输出流。关闭();} catch(异常e){ logger。错误(“文件输出流关闭错误,”,e);}} if(通道FTP!=空){通道FTP。disconnect();}}}}
20
2023-02
30
2022-11
29
2022-11
29
2022-11
29
2022-11
29
2022-11