使用ganymed ssh2实现scp以及ssh内容访问
(2012-12-19 14:57:07)
Ganymed SSH-2 for Java是一个开源的java代码实现ssh的
一,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等机器
// 输入密码
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
tmpfs
16G
100K
16G
1% /dev/shm
/dev/sdb1
485M
37M
423M
8% /boot
/dev/mapper/VolGroup-lv_home
/dev/sda
5.4T
4.7T
410G
93% /mnt
[root@swbss-ftp-007 xyz]#