ssh应用- linux服务器A登陆linux服务器B
服务器命令
实际背景在日常工作中,大家难免会遇到这样一种情况,就是我需要先登陆一台linux服务器A,然后从A登陆到另一台linux服务器B.
这么设计的目的一般都是出于安全的考虑,将可以线下直接访问的服务器和提供服务的服务器隔离开,同时也能防范一些攻击.但是这种设计对于正常使用也会带来一些麻烦,因此期望某些设计能够帮助我们更方便的使用.
ssh命令行直接登陆假设我们命令终端可以访问到的机器是A,也就代表A是能够被公司内网访问到,我们的目标服务器是B,那么我们可以在服务器A上提供一个web服务,然后通过接口的方式直接访问B服务器的内容,具体思路如下:
核心思路:
在服务器A上可以通过ssh命令直接登陆到服务器B上,那么就可以直接通过命令行的形式直接在B服务器执行相应命令.
在A服务器执行如下命令:
sshB服务器名"具体命令"复制代码
注意:具体命令是被包括在双引号中,如果命令中还有单双引号或者/等特殊符号,一定要注意转义
java代码如下:
StringcmdArray=newString{"/bin/sh","-c",finalCmd};process=Runtime.getRuntime.exec;复制代码
正常的返回可以通过process.getInputStream得到
异常信息的返回可以通过process.getErrorStream得到
优点
你在A服务器ssh登陆B服务器后,能正常执行的命令,按道理都可以通过这种方式用java代码实现,验证起来十分方便
开发简单,输入返回都可以由你的服务进行一定程度的控制和处理
可以自动加载目标服务器上的环境变量.
缺点
部分命令可能需要跟终端有所交互,通过这种方式会导致无法正常返回,需要特别处理
每一次请求代表一个命令,代表新建一条ssh咨询客服
利用jsch工具建立咨询客服核心思路没有什么变化,只不过在建立连接和执行命令的时候是通过jsch包提供的功能
maven依赖
复制代码 com.jcraft jsch 0.1.53
java代码实现如下
publicvoidjschthrowsJSchException,IOException{Liststdout=newArrayList<>;JSchjsch=newJSch;Sessionsession=jsch.getSession;session.setPassword;session.connect;//打开通道,设置通道类型,和执行的命令Channelchannel=session.openChannel;ChannelExecchannelExec=channel;channelExec.setCommand;channelExec.setInputStream;BufferedReaderinput=newBufferedReader));channelExec.connect;//接收远程服务器执行命令的结果Stringline;while)!=null){stdout.add;}input.close;//关闭通道channelExec.disconnect;//关闭sessionsession.disconnect;LOGGER.info);}复制代码
优点
ssh连接可以通过工具保持,适合命令频繁执行的情况,可以减少不必要的ssh咨询客服
各种api接口功能比较齐全,复杂度不高
支持拉取服务器文件
缺点
在认证方面有一些坑,需要根据遇见的情况自己填一下
执行时无法获取到目标服务器的环境变量,因此执行命令的时候需要用命令的全路径.例如xxxx/xxx/xxx/bin/java-jar,直接使用java-jar是不行的,可以通过type命令获得命令的路径
文章分类
Tags:服务器命令,ssh应用- linux服务器A登陆linux服务器B
版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。