ssh
这个命令算做是学习 Linux 时最基础的命令之一了。以前使用 ssh 时,都是经过用户名 + 密码的形式进行登陆的。以前写 TransFile-Shell 小工具[[1]](https://gitee.com/lwx19960428...,曾经经过服务端配置客户端公钥的方式进行免密登陆,这两天给朋友解决问题时,接触到 Jenkins 执行远程脚本的功能,涉及到了 SSH-Agent 作代理请求的功能,如今把几种方式都做为笔记写下来。html
根据百度百科介绍:SSH 是创建在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登陆会话和其余网络服务提供安全性的协议。利用 SSH 协议能够有效防止远程管理过程当中的信息泄露问题[[2]](https://baike.baidu.com/item/...。linux
从客户端来看,SSH 有两种形式的安全验证方式:git
口令验证因没法保证正在链接的服务器就是真正想要的服务器,因此可能存在服务端被冒充(中间人攻击)的方式。而密钥验证则是依赖客户端服务端之间的公私钥加解密方式,故不存在中间人攻击(中间人没有任何一端的私钥),但同时整个过程须要相对较长的时间。shell
具体的 ssh 相关资料可参照后续的参考连接进行了解。segmentfault
进行下述实验步骤前,请确认服务器已开启 SSH 服务,且相关端口的网络策略已经开通。安全
角色 | 主机名 | IP 地址 | 系统 |
---|---|---|---|
客户机 A | local-vmware-01 | 192.168.36.129 | CentOS 7.4 |
客户机 B | local-vmware-03 | 192.168.36.133 | CentOS 7.4 |
服务机 | local-vmware-02 | 192.168.36.132 | Ubuntu 18.04 LTS |
未配置公私钥对时,客户机 A 经过 SSH 登录时,登录提示须要密码。bash
ssh dcos@192.168.36.132
为了免密,一路回车,生成 SSH 要用的公私钥对,此步骤在客户机 A 执行。根据提示,生成出来的公私钥文件位于 ~/.ssh
目录下,其中 id_rsa
为私钥,id_rsa.pub
为公钥。服务器
ssh-keygen -t rsa
将客户机 A 的公钥内容复制出来,粘贴至服务机的 ~/.ssh/authorized_keys
文件中。网络
# local-vmware-01 上执行 cat ~/.ssh/id_rsa.pub # local-vmware-02 上执行 # 若是不存在 ~/.ssh 此目录,则须要先行手动建立,建立完注意同时赋权 700 mkdir ~/.ssh && chmod 700 ~/.ssh # 文件不存在,则 Vim 将自动建立该文件;如已存在,注意与以前记录间增长换行 vi ~/.ssh/authorized_keys # 同时,此文件须要赋权 600 权限,不容许其余用户修改 chmod 600 ~/.ssh/authorized_keys
再次经过 SSH 登陆,再也不须要密码便可从新登陆,使用 scp
命令等也是同样,再也不须要输入密码。至此,经过添加客户机公钥信任来实现免密登陆已经完成。ssh
上述方式能够很方便的经过公私钥的配置进行 SSH 的免密登陆,但当咱们没法拿到客户机的公钥时,就须要经过 ssh-agent
进行代理登陆。
什么都不作配置,在客户机 B 上经过 SSH 访问,提示须要输入密码。
由于客户机 A 已配置好了公钥信任,接下来咱们将在客户机 B 上经过 ssh-agent 的形式来进行代理登陆。
将客户机 A 的 id_rsa
私钥文件上传到客户机 B 中,同时设置其权限为 600,以上传到家目录为例。
# local-vmware-03 上执行 chmod 600 ~/id_rsa
经过以下命令启动 ssh-agent 服务、增长身份密钥、登陆认证等步骤,可不用密码登录服务机。
# 启动ssh-agent服务 ssh-agent # 启动ssh-agent bash服务 ssh-agent bash --login -i # 增长私钥文件 ssh-add ~/id_rsa # 从新SSH进行登陆,再也不须要输入密码 ssh dcos@192.168.36.132
以前的 ssh 命令登陆至关因而增长了默认的 -i ~/.ssh/id_rsa
参数,当一台 Linux 机器生成了多个 ssh 密钥时,就须要经过 -i 参数的形式来指定使用哪一个私钥文件参与到 ssh 链接的过程。同理,这种形式则是至关于自定义了 id_rsa 文件的位置,并未有太大的亮点。
# local-vmware-03 上执行 ssh -i ~/id_rsa dcos@192.168.36.132
在 Jenkins 中配置 ssh-agent 时,每一步都配置的没有问题,直接在 Jenkins 服务器上用 ssh-agent 工具也能够登陆,可是每次构建时都提示 Host key verification failed.
的报错。
通过分析,得出结论,是因为第一次登陆时须要输入 yes / no 致使的认证失败。要想解决此问题,可经过在链接命令上增长 -o "StrictHostKeyChecking no"
来解决此问题[[3]](https://blog.csdn.net/ITzhang...。
ssh -o "StrictHostKeyChecking no" dcos@192.168.36.132
经过上述几种免密登陆方式的配置,咱们能够 Get 到如下几个知识点:
[1] https://gitee.com/lwx19960428...
[2] https://baike.baidu.com/item/...