java SSH1/SSH2远程连接实例

看到网上有很多通过telnet实现远程登录的例子,就是找不到关于ssh远程登录的例子,ssh2的可能会有一些,但是目前开发项目遇到了比较底层的东西,这个需要通过ssh1连接的,于是就有了这个实例。

今天要给大家带来的就是 java通过ssh1/ssh2远程连接服务器的实例,实例用到了一个jar包,名称是mindterm,下载地址http://tech.cryptzone.com/mindterm/mindterm.html


废话不多说,看代码...

SshRequestHandler.java

package examples;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.SecureRandom;
import org.apache.log4j.Logger;
import com.mindbright.nio.NetworkConnection;
import com.mindbright.ssh.SSHConsoleClient;
import com.mindbright.ssh2.SSH2ConsoleRemote;
import com.mindbright.ssh2.SSH2SimpleClient;
import com.mindbright.ssh2.SSH2Transport;
import com.mindbright.util.RandomSeed;
import com.mindbright.util.SecureRandomAndPad;
public class SshRequestHandler {
	public static final Logger logger = Logger.getLogger(SshRequestHandler.class);
	//SSH1变量
	public SSHConsoleClient client_ssh1=null;
	//SSH2变量
	public SSH2ConsoleRemote client_ssh2=null;
	//通用变量
	private String version=null;//SSH1/SSH2:1/2
	public static boolean echo = false;
	/
	public boolean isEcho() {
		return echo;
	}
	public void setEcho(boolean echo) {
		SshRequestHandler.echo = echo;
	}
	public boolean login(String server, int port, String user, String password,String version){
		try {
			this.version=version;
			if (version.equals("ssh1"))
            {
				SSH1_imp ssh_imp=new SSH1_imp(server, String.valueOf(port), user, password);
				client_ssh1 = new SSHConsoleClient(ssh_imp.getSrvHost(), ssh_imp.getSrvPort(),ssh_imp,ssh_imp);
				if(client_ssh1.shell())
				{
					echo=true;
					logger.debug("ssh1登录成功");
		        	return true;
				}
		        else
		        {
		        	echo=false;
					return false;
		        }
            }
			else 
			{
				SSH2Transport transport = new SSH2Transport(NetworkConnection.open(server, port),createSecureRandom());
				SSH2SimpleClient Ssh2 = new SSH2SimpleClient(transport,user, password);
				client_ssh2 = new SSH2ConsoleRemote(Ssh2.getConnection());
                if(client_ssh2.shell())
                {
                	echo=true;
                	logger.debug("SSH2登录成功");
                	return true;
                }
                else
                {
                	echo=true;
                	return false;
                }
			}
		} catch (Exception e) {
			logger.error("登录失败:"+e.getMessage());
			echo=false;
			return false;
		}
	}
	private SecureRandomAndPad createSecureRandom()
	{
		byte[] seed;
        File devRandom = new File("/dev/urandom");
        if (devRandom.exists()) {
            RandomSeed rs = new RandomSeed("/dev/urandom", "/dev/urandom");
            seed = rs.getBytesBlocking(20);
        } else {
            seed = RandomSeed.getSystemStateHash();
        }
        return new SecureRandomAndPad(new SecureRandom(seed));
	}
	public InputStream exeCommend(String cmd)
	{
		try
		{
			if(version.equals("ssh1"))
			{
				OutputStream os = client_ssh1.getStdIn();
				os.write((cmd).getBytes());
				os.flush();
				Thread.sleep(2000);
				return client_ssh1.getStdOut();
			}
			else
			{
				OutputStream os = client_ssh2.getStdIn();	
				os.write((cmd).getBytes());
				os.flush();
				Thread.sleep(1000);
				return client_ssh2.getStdOut();
			}
		}
		catch (Exception e)
		{
			logger.error(e.getMessage());
			return null;
		}
	}
	public static String getString(InputStream in) throws Exception
	{
		String returnString="";
		while (true) {
			int count = in.available();
			if (count > 0) {
				byte[] tmp = new byte[count];
				in.read(tmp);
				String temp=new String(tmp);
				returnString+=temp;
			}
			if(returnString!=null&&returnString.length()>=0)
			{
				return returnString;
			}
		}
	}
	public static boolean getConnectioned() 
	{
		return echo;
	}
	public void disconnect() 
	{
		try {
			if(version.equals("ssh1"))
			{
				client_ssh1.close();
				echo=false;
			}
			else
			{
				client_ssh2.close();
				echo=false;
			}
			logger.debug("断开SSH连接!");
		} catch (Exception e) {
			logger.error(e.getMessage());
		}
	}
}
******************************************************************************************************************
SSH1_imp.java
package examples;
import java.io.File;
import java.io.IOException;
import java.security.interfaces.RSAPublicKey;
import java.util.Properties;

import com.mindbright.nio.NetworkConnection;
import com.mindbright.ssh.SSH;
import com.mindbright.ssh.SSHAuthenticator;
import com.mindbright.ssh.SSHClientUser;
import com.mindbright.ssh.SSHInteractor;
import com.mindbright.ssh.SSHInteractorAdapter;
import com.mindbright.ssh.SSHRSAKeyFile;

public class SSH1_imp extends SSHInteractorAdapter implements SSHAuthenticator, SSHClientUser{
	private Properties props = new Properties();
	SSH1_imp(String server,String port,String user,String password)
	{
		props.put("server", server);
        props.put("port", port);
        props.put("username", user);
        props.put("password", password);
        props.put("auth-method", "password");
	}
	public int getAliveInterval() {
		return 0;
	}

	public int getCompressionLevel() {
		return 0;
	}

	public int getConnectTimeout() {
		return 60;
	}

	public String getDisplay() {
		return null;
	}

	public int getHelloTimeout() {
		return 60;
	}

	public SSHInteractor getInteractor() {
		 return this;
	}

	public int getKexTimeout() {
		return 180;
	}

	public int getMaxPacketSz() {
		return 0;
	}

	public NetworkConnection getProxyConnection() throws IOException {
		return null;
	}

	public String getSrvHost() throws IOException {
		return getProp("server");
	}

	private String getProp(String key) {
	        return (String)props.get(key);
	}

	public int getSrvPort() {
		return Integer.parseInt(getProp("port"));
	}

	public boolean wantPTY() {
		return false;
	}

	public boolean wantX11Forward() {
		return false;
	}

	public int[] getAuthTypes(SSHClientUser arg0) {
		return SSH.getAuthTypes(getProp("auth-method"));
	}

	public String getChallengeResponse(SSHClientUser arg0, String arg1)
			throws IOException {
		return null;
	}

	public int getCipher(SSHClientUser arg0) {
		return SSH.CIPHER_3DES;
	}

	public SSHRSAKeyFile getIdentityFile(SSHClientUser arg0) throws IOException {
		String idfile = System.getProperty("user.home") + File.separatorChar + ".ssh" + File.separatorChar + "identity";
		return new SSHRSAKeyFile(idfile);
	}

	public String getIdentityPassword(SSHClientUser arg0) throws IOException {
		return null;
	}

	public String getPassword(SSHClientUser arg0) throws IOException {
		return getProp("password");
	}

	public String getUsername(SSHClientUser arg0) throws IOException {
		return getProp("username");
	}

	public boolean verifyKnownHosts(RSAPublicKey arg0) throws IOException {
		return true;
	}
}
****************************************************************************************************************************
ConfigReadUtil.java
 
package examples;
 
import java.io.File;
import java.io.FileInputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Properties;

import org.apache.log4j.Logger;


/**
 * 动态读取配置文件类
 * 
 * @author liubing
 */
public class ConfigReadUtil {
	private static Logger log = Logger.getLogger(ConfigReadUtil.class);

	/**
	 * 属性文件全名
	 */
	private static final String PFILE = "config.properties";

	/**
	 * 配置文件路径
	 */
	//private URI uri = null;

	/**
	 * 属性文件所对应的属性对象变量
	 */
	private long m_lastModifiedTime = 0;

	/**
	 * 对应于属性文件的文件对象变量
	 */
	private File m_file = null;

	/**
	 * 属性文件所对应的属性对象变量
	 */
	private Properties m_props = null;

	/**
	 * 唯一实例
	 */
	private static ConfigReadUtil m_instance = new ConfigReadUtil();

	/**
	 * 私有构造函数
	 * 
	 * @throws URISyntaxException
	 */
	private ConfigReadUtil() {
		try {
			m_lastModifiedTime = getFile().lastModified();
			if (m_lastModifiedTime == 0) {
				log.info(PFILE + "file does not exist!");
			}
			m_props = new Properties();
			m_props.load(new FileInputStream(getFile()));

		} catch (URISyntaxException e) {
			System.err.println("文件路径不正确");
			e.printStackTrace();
		} catch (Exception e) {
			System.err.println("文件读取异常");
			e.printStackTrace();
		}
	}

	/**
	 * 查找ClassPath路径获取文件
	 * 
	 * @return File对象
	 * @throws URISyntaxException
	 */

	private File getFile() throws URISyntaxException {
		URI fileUri = this.getClass().getClassLoader().getResource(PFILE)
				.toURI();
		m_file = new File(fileUri);
		return m_file;
	}

	/**
	 * 静态工厂方法
	 * 
	 * @return 返回ConfigurationRead的单一实例
	 */
	public synchronized static ConfigReadUtil getInstance() {
		return m_instance;
	}

	/**
	 * 读取一特定的属性项
	 */
	public String getConfigItem(String name, String defaultVal) {
		long newTime = m_file.lastModified();
		// 检查属性文件是否被修改
		if (newTime == 0) {
			// 属性文件不存在
			if (m_lastModifiedTime == 0) {
				System.err.println(PFILE + " file does not exist!");
			} else {
				System.err.println(PFILE + " file was deleted!!");
			}
			return defaultVal;
		} else if (newTime > m_lastModifiedTime) {
			m_props.clear();
			try {
				m_props.load(new FileInputStream(getFile()));
			} catch (Exception e) {
				System.err.println("文件重新读取异常");
				e.printStackTrace();
			}
		}
		m_lastModifiedTime = newTime;
		String val = m_props.getProperty(name);
		if (val == null) {
			return defaultVal;
		} else {
			return val;
		}
	}

	/**
	 * 读取一特定的属性项
	 * 
	 * @param name
	 *            属性项的项名
	 * @return 属性项的值(如此项存在), 空(如此项不存在)
	 */
	public String getConfigItem(String name) {
		return getConfigItem(name, "");
	}

}
***********************************************************************************************************
TestSsh.java
package examples;

import org.apache.log4j.Logger;

public class TestSsh {
	public static final Logger logger=Logger.getLogger(TestSsh.class);
	private static String server;
    private static int port;
    private static String user;
    private static String password;
    private static String version ;// "SSH1"/"SSH2"
    private static String cmdLine ;
	public static void main(String[] args){
		server="127.0.0.1";
    	port = 22;
    	user="administrator";
    	password="admin";
    	version="ssh2";
    	cmdLine="ls";
    	try {
    		SshRequestHandler ssh = new SshRequestHandler();
    		if(ssh.login(server, port, user, password, version))
    		{
    			logger.info(SshRequestHandler.getString(ssh.exeCommend(cmdLine+"\n")));
    			ssh.disconnect();
    		}
    		else 
    		{
    			logger.debug("登录失败");
			}
		} catch (Exception e) {
			logger.error("Exception:"+e);
		}
	}
}


-----------------------------------程序员 闫帆原创---------------------------------------

转载请注明原创人信息 程序员 闫帆yanfanvip

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值