一、背景概述在学习Linux的时候,ssh命令算是最基本的命令之一。之前使用ssh的时候,都是通过用户名+密码的方式登录的。在我写TransFile-Shell小工具[[1]](https://gitee.com/lwx19960428...之前,我在解决问题的时候都是在服务器端配置客户端公钥免密码登录的这两天为了朋友,接触到Jenkins执行远程脚本的功能,涉及到SSH-Agent作为代理请求的功能,现将几种方法记录下来作为笔记。2.SSH简介根据to百度百科:SSH建立在应用层安全协议的基础上,SSH是目前比较可靠的协议,为远程登录会话和其他网络服务提供安全保障,使用SSH协议可以有效防止远程管理时的信息泄露[[2]](https://baike.baidu.com/item/…。从客户端的角度来看,SSH有两种形式的安全验证方式:基于密码(password)的验证和基于密钥的验证。密码验证不能保证被连接的服务器是你真正想要的服务器,所以可能有一种方法可以冒充服务器(中间人攻击)。密钥验证依赖于客户端和服务端之间公钥和私钥的加解密,所以不存在中间人攻击(中间人没有任何末端私钥),但同时时间,整个过程需要比较长的时间。具体ssh相关信息,请参考后续参考链接。三、实验环境在进行以下实验步骤之前,请先确认服务器已经开启了SSH服务,相关端口的网络策略已经开启。角色主机名IP地址systemclientAlocal-vmware-01192.168.36.129CentOS7.4clientBlocal-vmware-03192.168.36.133CentOS7.4serverlocal-vmware-02192.168.36.132Ubuntu18.04LTS4.服务器配置公钥信任实现免密码登录。当未配置公私钥对时,客户端A通过SSH登录时,登录提示需要输入密码。sshdcos@192.168.36.132为了避免输入密码,一路回车生成SSH。公私钥对,此步骤在客户端A上进行,根据提示生成的公私钥文件位于~/.ssh目录下,其中id_rsa为私钥,id_rsa.pub为公钥.ssh-keygen-trsa复制客户端A的公钥内容,粘贴到服务器的~/.ssh/authorized_keys文件中。#在local-vmware-01上执行cat~/.ssh/id_rsa.pub#在local-vmware-02上执行#如果~/.ssh目录不存在,需要先手动创建。创建好后注意同时给700mkdir赋能~/.ssh&&chmod700~/.ssh#如果文件不存在,Vim会自动创建文件;如果存在,注意在前面的记录之间加一个换行符vi~/.ssh/authorized_keys#同时这个文件需要授权600权限,其他用户不允许修改chmod600~/.ssh/authorized_keys通过SSH重新登录,可以免密码重新登录。使用scp命令等也是如此,不再需要输入密码。至此,通过添加客户端公钥信任实现免密登录就完成了。5、客户端可以通过私钥身份信息登录。上面的方法可以通过公私钥的配置方便的进行SSH免密登录,但是当我们无法获取到客户端的公钥时,就需要使用ssh-agent作为代理登录。什么都不要配置,在客户端B上通过SSH访问,提示输入密码。因为客户端A已经配置了公钥信任,接下来我们在客户端B上使用ssh-agent代理登录,将客户端A的id_rsa私钥文件上传给客户端B,并设置其权限为600。以上传为例以主目录为例。#在local-vmware-03~/id_rsa上执行chmod600(1)通过ssh-agent代理登录。通过以下命令启动ssh-agent服务,添加身份密钥,登录认证等步骤,即可免密码登录服务器。#启动ssh-agent服务ssh-agent#启动ssh-agentbash服务ssh-agentbash--login-i#添加私钥文件ssh-add~/id_rsa#重新SSH登录,无需输入密码sshdcos@192.168.36.132(2)通过ssh-i代理登录前面的ssh命令登录相当于添加了默认的-i~/.ssh/id_rsa参数。当一台Linux机器生成多个ssh密钥时,您需要使用-i参数来指定使用哪个私钥文件参与ssh连接过程。同理,这种形式相当于自定义了id_rsa文件的位置,并没有太多亮点。#在local-vmware-03上执行ssh-i~/id_rsadcos@192.168.36.132六、踩坑记录在Jenkins中配置ssh-agent的时候,每一步配置都没有问题,直接在ssh-agent上使用Jenkinsserver工具也可以登录,但是提示Hostkeyverificationfailed的错误。每次建造时。经分析,首次登录时需要输入yes/no,导致认证失败。解决这个问题,在连接命令中加入-o"StrictHostKeyCheckingno"即可解决[[3]](https://blog.csdn.net/ITzhang....ssh-o"StrictHostKeyCheckingno"dcos@192.168.36.132七、小结通过以上几种免密码登录方式的配置,我们可以得到以下知识点:SSH认证与身份文件密切相关,不同服务器可以使用相同的身份文件privatekeyfile是的,私钥文件极其重要,所以一定要保管好自己的私钥文件,遇到坑多查资料和相关的linuxman文档,总会爬出来的。八、参考资料[1]https://gitee.com/lwx19960428...[2]https://baike.baidu.com/item/...[3]https://blog.csdn.net/ITzhang...[4]https://wangchujiang.com/linu...