当前位置:编程学习 > JAVA >>

Java operate file or system between different service

设想:能不能在不同服务器之间文件传输,或是执行操作系统的命令的方式来操作服务器?
答案:当然可以
 
首先,在这里介绍一下不用密码怎么去访问别的service。(这是后续操作的基础)
 
 
要让 HostB 允许HostA 上的用户User1 进行操作,需要:
 
1. HostA 上以 User1 登陆,或 su - User1
2. 用ssh-keygen 命令,来生成HostA 的密钥对文件
 ssh-keygen -t rsa
 生成目录:/home/User1/.ssh/
 id_rsa 是私钥文件
 id_rsa.pub 是公钥文件
3. 修改公钥文件属性
 chmod 755 /home/User1/.ssh/id_rsa.pub
4. 将 HostA 上的公钥内容 id_rsa.pub 添加到 HostB 上 
 如果HostB上没有  /home/User1/.ssh 目录或authorized_keys 则需要新建
 将HostA 的 id_rsa.pub 文件内容,添加到 /home/User1/.ssh/authorized_keys 文件中
5. 测试:(注意需要以 User1 登陆)
 scp  1.txt UserB@HostB:/****/xxxx/
 
在不需要密码的情况下能把1.txt文件从HostA  copy  至HostB,那么,该配置设置ok。
 
 
其次,网上有很多java实现的ssh,比如jsch等。我们在这里介绍两种底层的操作,更加简明、高效
 
1. Runtime.getRuntime().exec()
 
我想大家对这个不陌生吧,Runtime这个东西很强大,只要是你的操作系统能够完成的,它都能完成。比如linux系统中我们常用的scp命令,跨服务操作
Runtime.getRuntime().exec("scp -r /###/dir  user@HostB:/dir") ;这样就可以把你的服务器上的文件copy至HostB上。强大吧,当然该功能需要借助于上述说的公钥文件的配置。至于采用scp来copy file和directory的具体参数就不多说了。
 
 
2. ganymed-ssh2-build210.jar包提供了很多从方法
(API:http://www.ganymed.ethz.ch/ssh2/javadoc/index-all.html#_R_)它的sess.execCommand(command) ;方法依旧能完成上述scp的功能。
 
这两者的共同之处在于它们都是在执行操作系统底层的东西,简洁、高效、非常强大。不仅仅是我在上面介绍的scp的功能,比如删除目录以及该目录下所有的目录&文件呢?rm -rf /###/drectory ......
 
哈哈,大家也许看明白了,只要是你的操作系统所能执行的命令,这里都可以帮你完成,要让我用一句话评价,那就是:强大!

作者“zzhangyongjie”
 

补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,