当前位置: 首页 > 后端技术 > Java

自动化检测工具:如何免密码登录服务器

时间:2023-04-02 01:03:12 Java

你好,我会java测试对于新加入Swift集群的服务器,Swift集群网络连通性等方面的验证。Swift工具开发的背景是什么?云计算OpenStack项目中的关键对象存储技术也是该公司的云产品之一。目前已有50+服务器集群上线。有时遇到业务高峰,至少可以扩容10台服务器来缓解问题。为了将这10台服务器集成到整个Swift服务集群中,每台服务器都必须进行Swift组件安装、配置文件下发、网络连通性检查等工作。由于服务器数量众多,人工目测服务器相关信息,难免会有遗漏,导致生产问题频发。为了解决这样一个问题,我利用Java语言、Testng框架等技术开发了一个在线自动检测工具。对于新加入Swift集群的每台服务器,主要检测以下几个方面。过程很曲折,但是收获很多。已投入使用,不仅丰富了在线验证的内容,还提高了新服交付效率。近期打算用几篇文章详细谈谈这个工具在开发过程中遇到的问题和解决方法。希望对大家开发工具有所帮助,后期会考虑开源这个工具的源码。如何获取服务器相关数据?对于1-6项,自动检测工具必须先登录新的投递服务器获取相关数据后才能进行检测,但是如何登录呢?第一种方案是提前配置好待测服务器的账号和密码,使用ganymed-ssh2jar包登录服务器。代码如下:publicstaticConnectiongetConn(Stringip,StringuserName,Stringpwd,intport){Connectionconn=newConnection(ip);布尔值=真;尝试{conn.connect();blag=conn.authenticateWithPassword(userName,pwd);if(!blag){thrownewIOException("认证失败。文件scp到数据服务器时发生异常");}}catch(IOExceptione){e.printStackTrace();}if(blag){returnconn;}else{返回空值;但是,让线上服务器的密码以明文方式串流就有点粗心了,如果有人拿到线上服务器的账号和密码进行非法操作,那将是生产灾难,所以采用第二种方案SSH免密码登录。什么是SSH免密码登录?SSH免密码登录是什么意思?简单的说就是两台服务器之间不用输入密码就可以ssh+对方ip登录。这就需要详细讨论ssh登录的原理了。一般服务器用户目录使用如下命令ssh-keygen-trsa生成几个文件。id_rsa(privatekey)服务器端RSA算法生成的私钥。id_rsa.pub(publickey)服务器上RSA算法生成的公钥和私钥是一对密钥对,用于连接其他服务器。例如:将主机名001的id_rsa.pub的内容追加到主机名002的authorized_keys文件中,主机001可以用ssh002的ip登录。known_hostsssh会在~/.ssh/known_hosts中记录你访问过的每台电脑的公钥(publickey)。下次访问同一台计算机时,OpenSSH将检查公钥。如果公钥不同,OpenSSH会发出警告,防止您受到DNSHijack等攻击。SSH远程连接的原理是什么?工具自动登录服务器源码长什么样?部分源码如下:host为登录服务器ip,userName为登录服务器的用户名publicstaticSessiongetSession(Stringhost,StringuserName)throwsJSchException{Sessionsession=null;#privateKeyPath本地私钥路径。StringprivateKeyPath="~/.ssh/id_rsa";JSchjsch=newJSch();jsch.addIdentity(privateKeyPath);session=jsch.getSession(用户名,主机,22);session.setConfig("PreferredAuthentications","publickey,keyboard-interactive,password");属性配置=新属性();config.put("StrictHostKeyChecking","no");session.setConfig(配置);会话.connect();returnsession;}command:是登录服务器要执行的命令;publicstaticStringprintInfo(Sessionsession,Stringcommand)throwsIOException,JSchException{Channelchannel=session.openChannel("exec");((ChannelExec)通道).setPty(false);((ChannelExec)频道).setCommand(命令);channel.setInputStream(null);((ChannelExec)通道).setErrStream(System.err);通道.connect();//打印成功信息InputStreamin=channel.getInputStream();字符串结果="";BufferedReader阅读器=新BufferedReader(新InputStreamReader(输入));字符串缓冲区;while((buf=reader.readLine())!=null){结果+=newString(buf.getBytes(StandardCharsets.UTF_8))+",";}log.info("result"+result.length());通道断开连接();log.info("返回结果:"+result);如果(result.length()<=0){返回"";}returnresult.substring(0,result.length()-1);}返回的结果是命令执行的结果总结本文主要分享SSH密码登录的原理和Java中自动登录服务器的两种方法代码,Python中的paramiko库也可以远程控制服务器。代码自动登录服务器,执行linux命令或者上传下载文件,可以帮助我们解决一些自动化场景下的很多问题。加我微信lvceshikaifa,免费面试辅导,学习资料,简历模板获取,加入学习群。