javassh2协议的简单介绍

博主:adminadmin 2023-01-16 00:42:08 337

今天给各位分享javassh2协议的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

简单介绍一下SSH2

这个一句话说不清楚,我们做的simplejee这个项目里分别实现了miniMVC,miniORM,miniDI,以及SimpleMVC,或许可以帮助你理解他们的原理。

简单的说,struts2配置一个Filter后,获取请求,然后根据路径信息调用你写的action类的相应方法,然后根据你的方法返回的结果进行显示,在调用你的方法前后,还会调用一堆拦截器对你的action做些预处理,帮你省去很多的麻烦。

Hibernate是ORM框架,就是将你对java对象的修改持久化到数据库中,或则或就是在java对象和数据库的数据之间建立对应关系。或则说Hibernate就是根据你的配置,将java对象的数据保持到数据库,以及把数据库里的数据查询出来,然后包装成java对象方便你使用。

而spring主要的有两个作用DI和AOP。spring提供一个DI容器,帮你管理对象,包括对象的创建,对象之间的依赖关系以及对象的销毁。而AOP我一句话就说不清楚了,他的目的就是为了解决一些横跨多个类的统一操作。具体的你慢慢了解吧。

java怎么执行shell脚本

如果shell脚本和java程序运行在不同的服务器上,可以使用远程执行Linux命令执行包,使用ssh2协议连接远程服务器,并发送执行命令就行了,ganymed.ssh2相关mave配置如下,你可以自己百度搜索相关资料。

如果shell脚本和java程序在同一台服务器上,

这里不得不提到java的process类了。

process这个类是一个抽象类,封装了一个进程(你在调用linux的命令或者shell脚本就是为了执行一个在linux下执行的程序,所以应该使用process类)。

process类提供了执行从进程输入,执行输出到进程,等待进程完成,检查进程的推出状态,以及shut down掉进程。

dependency  

  groupIdcom.ganymed.ssh2/groupId  

  artifactIdganymed-ssh2-build/artifactId  

  version210/version  

 /dependency

本地执行命令代码如下:

String shpath="/test/test.sh";   //程序路径

    Process process =null;

    String command1 = “chmod 777 ” + shpath;

    process = Runtime.getRuntime().exec(command1);

    process.waitFor();

SSH 协议原理、组成、认证方式和过程

SSH 是(Secure SHell protocol) 的简写,安全外壳协议(SSH)是一种在不安全网络上提供安全远程登录及其它安全网络服务的协议。

OpenSSH 是SSH (Secure SHell)协议的免费开源实现。SSH协议族可以用来进行远程控制,或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程的中的数据,并由此来代替原来的类似服务。

在过去我们使用的rsh和telnet,因为包括登录时的ID和密码数据没有加密就传到网络上,存在安全上的问题。即使在内部网上,也有在因特网上的窃取和篡改等危险性。SSH将包括密码在内的所有数据都已进行了加密处理,可以进行更安全的远程操作。在SSH中,由于协议标准的不同而存在SSH1和SSH2两个不同的版本。SSH2是为了回避SSH1所使用的加密算法的许可证问题而开发的(现在这一许可证问题已经不存在了)。TLES 8中作为安装SSH协议的应用程序采用了开放源码的OpenSSH。OpenSSH与SSH1和SSH2的任何一个协议都能对应,但默认使用SSH2。

SSH 主要有三部分组成:

同时SSH协议框架中还为许多高层的网络安全应用协议提供扩展的支持。它们之间的层次关系可以用如下图来表示:

对于SSH这样以提供安全通讯为目标的协议,其中必不可少的就是一套完备的密钥机制。由于SSH协议是面向互联网网络中主机之间的互访与信息交换,所以主机密钥成为基本的密钥机制。也就是说,SSH协议要求每一个使用本协议的主机都必须至少有一个自己的主机密钥对,服务方通过对客户方主机密钥的认证之后,才能允许其连接请求。一个主机可以使用多个密钥,针对不同的密钥算法而拥有不同的密钥,但是至少有一种是必备的,即通过 DSS算法产生的密钥。关于DSS算法,请参考 FIPS-186 文档.SSH协议关于主机密钥认证的管理方案有两种,如下图所示:

每一个主机都必须有自己的主机密钥,密钥可以有多对,每一对主机密钥对包括公开密钥和私有密钥。在实际应用过程中怎样使用这些密钥,并依赖它们来实现安全特性呢?如上图所示,SSH协议框架中提出了两种方案。

在第一种方案中,主机将自己的公用密钥分发给相关的客户机,客户机在访问主机时则使用该主机的公开密钥来加密数据,主机则使用自己的私有密钥来解密数据,从而实现主机密钥认证,确定客户机的可靠身份。在图2(a)中可以看到,用户从主机A上发起操作,去访问,主机B和主机C,此时,A成为客户机,它必须事先配置主机B和主机C的公开密钥,在访问的时候根据主机名来查找相应的公开密钥。对于被访问主机(也就是服务器端)来说则只要保证安全地存储自己的私有密钥就可以了。 

在第二种方案中,存在一个密钥认证中心,所有系统中提供服务的主机都将自己的公开密钥提交给认证中心,而任何作为客户机的主机则只要保存一份认证中心的公开密钥就可以了。在这种模式下,客户机在访问服务器主机之前,还必须向密钥认证中心请求认证,认证之后才能够正确地连接到目的主机上。

很显然,第一种方式比较容易实现,但是客户机关于密钥的维护却是个麻烦事,因为每次变更都必须在客户机上有所体现;第二种方式比较完美地解决管理维护问题,然而这样的模式对认证中心的要求很高,在互联网络上要实现这样的集中认证,单单是权威机构的确定就是个大麻烦,有谁能够什么都能说了算呢?但是从长远的发展来看,在企业应用和商业应用领域,采用中心认证的方案是必要的。

另外,SSH协议框架中还允许对主机密钥的一个折中处理,那就是首次访问免认证。首次访问免认证是指,在某客户机第一次访问主机时,主机不检查主机密钥,而向该客户都发放一个公开密钥的拷贝,这样在以后的访问中则必须使用该密钥,否则会被认为非法而拒绝其访问。

在整个通讯过程中,为实现 SSH的安全连接,服务器端与客户端要经历如下五个阶段:

* 版本号协商阶段,SSH目前包括 SSH1和SSH2两个版本, 双方通过版本协商确定使用的版本

* 密钥和算法协商阶段,SSH支持多种加密算法, 双方根据本端和对端支持的算法,协商出最终使用的算法

* 认证阶段,SSH客户端向服务器端发起认证请求, 服务器端对客户端进行认证

* 会话请求阶段, 认证通过后,客户端向服务器端发送会话请求

* 交互会话阶段 ,会话请求通过后,服务器端和客户端进行信息的交互

Q1: SSH的版本和区别。

SSH2避免了RSA的专利问题,并修补了CRC的缺陷。SSH2用数字签名算法(DSA)和Diffie-Hellman(DH)算法代替RSA来完成对称密钥的交换,用HMAC来代替CRC。同时SSH2增加了AES和Twofish等对称加密算法。

A1: SSH(Secure SHell)到目前为止有两个不兼容的版本——SSH1和SSH2。SSH1又分为1.3和1.5两个版本。SSH1采用DES、3DES、 Blowfish和RC4等对称加密算法保护数据安全传输,而对称加密算法的密钥是通过非对称加密算法(RSA)来完成交换的。SSH1使用循环冗余校验码(CRC)来保证数据的完整性,但是后来发现这种方法有缺陷。

更多内容请参考The SSHv1 Protocol The SSHv2 Protocol

Q2: 什么是HMAC?

A2: HMAC(Hash Message Authentication Code) ,散列消息鉴别码,基于密钥的Hash算法的认证协议。消息鉴别码实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。

Q3: 什么是X11 forwarding?

A3: sh的X11 forwarding特性可以使X client和X server安全地通讯。使用X11 forwarding后,从X client到X Server方向的数据先被送至ssh server,ssh server利用和ssh client的安全通道转发给ssh client,再由ssh client转发给X server,从X server到X client的数据流同理。这里ssh server和ssh client充当了X client和X server间数据的转发器,由于ssh server和X client、ssh client和X server一般在同一台机器上,它们之间是一种安全的进程间通讯,而ssh server和ssh client间的通讯也是安全的,所以X client和X server间的通讯就是安全的。

Q4: 什么是TTY?

A4: 终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是 Teletype的缩写。Teletype是最早出现的一种终端设备,很象电传打字机,是由Teletype公司生产的。设备名放在特殊文件目录/dev/下。

Q5: 简单描述下SSH运行的过程?

java中StreamGobbler什么意思

你是要用Java通过SSH2协议执行远程Shell脚本吗?这个是Ganymed SSH-2 for Java里面的,只需要指定合法的用户名口令,或者授权认证文件,就可以创建到远程Linux主机的连接,在建立起来的会话中调用该Linux主机上的脚本文件,执行相关操作。

StreamGobbler的作用是把session的标准输出包装成InputStream,用于接收目标服务器上的控制台返回结果,读取br中的内容。然后在循环中,把每一行的内容添加到StringBuffer里面。

怎么用java实现ssh协议通信

import ch.ethz.ssh2.Connection;  

import ch.ethz.ssh2.Session;  

import ch.ethz.ssh2.StreamGobbler;  

import com.io.Debug;  

import java.io.BufferedReader;  

import java.io.IOException;  

import java.io.InputStream;  

import java.io.InputStreamReader;  

import java.io.OutputStream;  

/** 

 * 

 * @author leon.lee 

 */  

public class ChangeEmailPassword {  

    private String username = "";  

    private String oldpassword = "";  

    private Connection conn = ;  

    private boolean hasError = false;  

    private String ErrorMessage = "";  

    private boolean isSuccessfully = false;  

    private String SystemMessage = "";  

      

    public static final String HOST = "127.0.0.1"; //server ip  

    public boolean isSuccessfully(){  

        return isSuccessfully;  

    }  

    public boolean isHasError(){  

        return hasError;  

    }  

    public String getErrorMessage(){  

        return ErrorMessage;  

    }  

    public void setErrorMessage(String msg){  

        hasError = true;  

        this.ErrorMessage =  msg;  

    }  

    /** 

     * Creates a new instance of codeChangeEmailPassword/code. 

     * @param username 

     * @param oldpassword 

     */  

    public ChangeEmailPassword(String username,String oldpassword) {  

        this.username = username;  

        this.oldpassword = oldpassword;  

         try{  

             conn = new Connection(HOST);  

             conn.connect();  

            /* Authenticate */  

            boolean isAuthenticated = conn.authenticateWithPassword(username, oldpassword);  

            if (isAuthenticated == false) {  

                setErrorMessage("Authentication failed.");  

                conn=;  

            }  

         }catch(Exception e){  

             conn.close();  

             conn = ;  

             System.out.println(e);  

         }  

    }  

    public void setNewPassword(String newpassword) {  

        if(hasError){  

            return;  

        }  

        if (conn==){  

            return;  

        }  

        try{  

            Session sess = conn.openSession();  

            sess.execCommand("passwd");  

            InputStream so = sess.getStdout();  

            InputStream err = sess.getStderr();  

            OutputStream out = sess.getStdin();  

              

            byte[] buffer = new byte[500];//其实没有必要这么大.130就差不多了.怕万一有什么提示.  

            int length = 0;  

            length = err.read(buffer);  

//            if (length  0) {  

//                System.out.println("#1:"+ new String(buffer, 0, length));  

//                //(current) UNIX password:  

//            }  

            String coldpassword = oldpassword+"\n";  

            out.write(coldpassword.getBytes());  

            length = err.read(buffer);  

//            if (length  0) {  

//                System.out.println("#2:"+ new String(buffer, 0, length));  

//                //(current) UNIX password:  

//            }  

            String cnewpass = newpassword +"\n";  

            out.write(cnewpass.getBytes());  

            length = err.read(buffer);  

            if (length  0) {  

                String rs = new String(buffer, 0, length);  

                //System.out.println("#3:"+rs);  

                if(rs.indexOf("BAD")-1){  

                    sess.close();  

                    conn.close();  

                    setErrorMessage(rs);  

                    return;  

                }  

            }  

            out.write(cnewpass.getBytes());  

            length = so.read(buffer);  

            if (length  0) {  

                String rs = new String(buffer, 0, length);  

                if(rs.indexOf("successfully")-1){  

                    this.isSuccessfully = true;  

                    this.SystemMessage = rs;  

                }  

            }  

            /* Close this session */  

            sess.close();  

            /* Close the connection */  

            conn.close();  

        } catch (IOException e) {  

            e.printStackTrace(System.err);  

        }  

    }  

    /** 

     * @param args the command line arguments 

     */  

    public static void main(String[] args) {  

        ChangeEmailPassword cep = new ChangeEmailPassword("username", "oldpassword");  

        if(cep.isHasError()){  

            System.out.println(cep.getErrorMessage());  

            cep = ;  

            return;  

        }  

        cep.setNewPassword("newpassword");  

        if(cep.isHasError()){  

            System.out.println(cep.getErrorMessage());  

            cep = ;  

            return;  

        }  

        if(cep.isSuccessfully){  

            System.out.println(cep.getSystemMessage());  

        }  

    }  

    /** 

     * @return the SystemMessage 

     */  

    public String getSystemMessage() {  

        return SystemMessage;  

    }  

}

关于javassh2协议和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。