JAVA使用ssh连接远程服务器执行命令

首先需要添加一个ssh连接的maven依赖

<dependency>
  <groupId>ch.ethz.ganymed</groupId>
  <artifactId>ganymed-ssh2</artifactId>
  <version>262</version>
</dependency>

demo:

Connection conn = new Connection(hostName, port);
conn.connect();
// 第一种,使用用户名密码验证身份
// conn.authenticateWithPassword(userName, password);
// 第二种,使用用户名密码以及秘钥验证身份
conn.authenticateWithPassword(/*用户名*/userName, /*秘钥文件*/keyFile, /*密码*/password);
// 此时就可以用conn do something啦!
Session session = conn.openSession();
session.execCommand(/*要执行的命令*/command);
// 获取输入流用来读取执行结果,自己封装流read即可
InputStream is = new StreamGobbler(session.getStdout())
// do read

封装成一个工具类就可以方便的执行命令啦,但是我的需求还要上传下载文件,每次使用scp都需要输入密码,怎么办呢,因为本来是想做一个运维后台,不需要手动到服务器上操作就可以从零部署项目,其他操作都可以使用java执行命令,但是上传下载文件,配置之类的,每次都需要输入密码,所以我采用了将本机的公钥放入服务器的authorized_keys实现免密上传下载,但是这一步必须要手动操作,如果有更好的办法欢迎大佬私信留言我,感激不尽
操作如下:

# 生成秘钥对
ssh-keygen -t rsa
# 将本地生成的公钥上传至远程服务器
scp ~/.ssh/id_rsa.pub 用户名@远程主机ip:~/.ssh/authorized_keys
# 此时需要键入远程服务器的密码,输入后显示上传界面即为成功,两台服务器通信就不需要密码了
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容