使用ganymed ssh2实现scp以及ssh内容访问

来源:互联网 发布:网络专科学位证有用吗 编辑:程序博客网 时间:2024/05/22 15:01

使用ganymed ssh2实现scp以及ssh内容访问

 (2012-12-19 14:57:07)
转载
标签: 

ganymed

 

ssh2

 

scp

 

java

 

ssh

 

it

分类: Java
Ganymed SSH-2 for Java是一个开源的java代码实现ssh的

下载地址http://www.ganymed.ethz.ch/ssh2/

一,scp实现
主要使用put方法把本地的文件scp拷贝到远程机器,同理使用get方法把文件从远程机器拷贝到本地。
实现代码大致如下,主要分为6个步骤:
private void doSCP(String hostname, String user, String psw, String localPath, String remotePath) throws Exception {
//1, 创建一个连接connection对象
Connection conn = new Connection(hostname);
//2, 进行连接操作
conn.connect();
//3, 进行连接访问授权验证
boolean isAuth = conn.authenticateWithPassword(user, psw);
if(!isAuth)
throw new Exception("Authentication failed");
//4, 创建一个SCPClient对象
SCPClient client = new SCPClient(conn);
try {
for(int i = files.length - 1; i >= 0 ; i --) {
File cur = files[i];
String curname = cur.getName();
File rnm = null;
if(cur.exists()) {
String name = localPath + File.separatorChar + cur.getName() + ".scping";
rnm = new File(name);
cur.renameTo(rnm);
} else {
continue;
}
if((rnm != null) && rnm.exists()) {
String scplocal = localPath + File.separatorChar + rnm.getName();
//5, 进行文件scp远程拷贝
client.put(scplocal, curname, remotePath, "0777");
rnm.delete();
}
}
}
finally {
//6, 使用完关闭连接
conn.close();
}
}

二,ssh实现远程机器内容访问
由于任务特点,需要从本地win7系统先登录到A机器(linux系统),然后从A再登录到其他B,C,D等(均为linux系统),然后查看B,C,D等机器上的信息。
具体实现方式先使用该开源连接到机器A,然后调用语句"ssh hostip"等连接到B,C,D等机器。
实现代码大致如下:
public static void main(String[] args) throws Exception {
// 连接A机器
Connection conn = new Connection("192.168.0.101");
conn.connect();
boolean isAuthenticated = conn.authenticateWithPassword("root", "centos");
if(!isAuthenticated) {
throw new Exception("not authenticated");
}
Session sess = conn.openSession();
//下面两句话必须添加才能使用下面的out.write()方法
sess.requestDumbPTY();
sess.startShell();
InputStream in = sess.getStdout();
InputStream err = sess.getStderr();
OutputStream out = sess.getStdin();
// 用于输出信息的线程
Thread t1 = new MyStdIn(in);
Thread t2 = new MyStdIn(err);
t1.start();
t2.start();
// 连接B,C或D等机器
        out.write("ssh 192.168.0.105\n".getBytes());
        Thread.sleep(1000);
// 输入密码
        out.write("*****\n".getBytes());
        Thread.sleep(1000);
        out.write("df -h\n".getBytes());

sess.close();
conn.close();
}
===================================================
上述命令输出的内容:
Last login: Wed Dec 19 14:26:00 2012 from swbss-web-05

ssh 192.168.0.105
[root@swbss-web-05 ~]# ssh 192.168.0.105
root@192.168.0.105's password: 
Last login: Wed Dec 19 14:26:06 2012 from 192.168.0.101

[root@swbss-ftp-007 ~]# cd /home/xyz/
[root@swbss-ftp-007 xyz]# ls
LogsImportSys.jar LogsImportSys.sh  log  nohup.out
[root@swbss-ftp-007 xyz]# df -h
文件系统      容量  已用  可用 已用%% 挂载点
/dev/mapper/VolGroup-lv_root
                       50G  3.5G   44G   8% /
tmpfs                  16G  100K   16G   1% /dev/shm
/dev/sdb1             485M   37M  423M   8% /boot
/dev/mapper/VolGroup-lv_home
                      835G  3.5G  789G   1% /home
/dev/sda              5.4T  4.7T  410G  93% /mnt
[root@swbss-ftp-007 xyz]# 
0 0
原创粉丝点击