java ssh1_[置顶] 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.javapackage 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.javapackage 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值