首页 💻极客编程,建站运维🔌

使用 SSH 密钥进行身份验证可以免去每次都输入密码的繁琐操作,同时账户安全性也得到大幅提高。

那么如何做呢?小胖狐根据大佬韦世东的文章做了相关实践,并进行了干货总结。

SSH 文件默认存放在 ~/.ssh 目录下,如果你是 win 系统,你可以使用 git bash 进入这个目录来查看:cd ~/.ssh && ls。也可以在资源管理器中查看,一般存放在 C:\Users\替换成你的用户名\.ssh 文件夹下。如果这个目录下什么文件都没有代表没有生成过 SSH 密钥,你可以后续生成一个,如果有了,你会看到 id_rsaid_rsa.pub 这样的文件,前者为密钥,后者为公钥。

生成 SSH 密钥

如果你曾做过 Github 或 Gitee 等代码托管平台的 git 代码推送,可能生成过 SSH 密钥。如果没有,不用着急,打开 cmd 窗口,用下面的命令生成一下(命令使用会用到 ssh-keygen 工具,如果你执行生成命令后报这个工具找不到,请安装 Git 即可):

ssh-keygen -t rsa -C "vansenb@foxmail.com"

这里的邮箱 vansenb@foxmail.com 换成你自己的邮箱。大概解读一下代码的意思,意思是通过生成工具,生成一个 rsa 算法加密的密钥对,后面标注个人标识即邮箱。运行命令后,会咨询你密钥存放的位置、密码等信息,通常不需要做任何修改和填写,一路回车即可,最后会告诉你密钥对已经生成完成,默认就是放到了 ~/.ssh 目录下,这时候你再进去该目录,就可以看到了。

实现免密登录

通常情况下,我们会在 cmd 中用 ssh username@ip 命令登录服务器或使用一些三方工具登录,执行命令后终端会提示我们输入密码。更好的做法是借助 SSH 密钥帮助我们验证身份,直接省去输入密码的步骤。

如何操作呢?首先到你本机的 ~/.ssh 目录下,找到 id_rsa.pub 公钥文件,使用记事本打开,复制里面的全部内容。然后先用密码登录你的服务器,还是来到服务器的 ~/.ssh 目录下,看一下是否有这个文件 authorized_keys,如果没有,请新建一个,如果有了,请打开编辑该文件,并将复制的公钥内容粘贴到这个文件中,使服务器认可我们的公钥,这一步有点类似 Github 上面添加公钥的过程我觉得。

在 linux 服务器上编辑的过程,如果你使用的是 vim 编辑器,那么命令如下:

$ cd ~/.ssh
$ vim authorized_keys

使用 vim 编辑器打开文件后按 i 键进入编辑模式,使用键盘快捷键 Ctrl + V 粘贴刚才复制的公钥字符串。接着按 ESC 键进入 vim 编辑器的命令行模式,输入 :wq 并回车保存。

此时我们可以在本地测试免密登录了,比如:

ssh root@10.1.1.1

然后按下回车即可,如果是第一次登录到这台云服务器,终端会提示:

The authenticity of host '10.1.1.1 (10.1.1.1)' can't be established.
ECDSA key fingerprint is SHA256:nGvmS+JKzQf1gG+Nzc0QN/qS6xSp1iV0rJFP1dILel4.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

这时候我们输入 yes 并回车即可。回车之后终端给出了新的提示:

Warning: Permanently added '10.1.1.1' (ECDSA) to the list of known hosts.
Last login: Wed Dec 23 21:43:28 2020 from 111.94.33.65

Welcome to Cloud Elastic Compute Service !

[root@iZ1nmehZ ~]#

到这里,表示我们的免密登录成功!可以操作云服务器了!

免密登录测试仍然提示要输入密码怎么办?

当然,有部分同学会遇到,明明添加了公钥,免密登录还是提示需要输入密码的问题,这个小胖狐也遇到了,怎么办呢?这是因为有些服务器中的 sshd 服务配置并未开启公钥登录选项,这时候就需要我们到云服务器上开启 sshd 服务的公钥登录配置。

再次登录服务器,执行 vim /etc/ssh/sshd_config 命令,进入到 sshd 配置文件后找到 PubkeyAuthentication 项,按 i 进入编辑模式,将这一行的 # 的注释去掉,使之生效,同时,将该值的配置设置为 yes。最终改好之后这一行正确的效果如下:

PubkeyAuthentication yes

然后还是按 ESC 键进入 vim 编辑器的命令行模式,输入 :wq 并回车保存。操作完之后重新启动 sshd 服务,重启命令为 service sshd restart

这时候再在本地测试免密登录,看是否能成功呢?

免用户名和免 IP 登录实现

上面的操作中,我们要记住要登录的用户名和对应的 IP 地址,而且如果 SSH 的端口号变了不是 22 的话,可能还会有连接问题,这个小胖狐曾感同身受,那么对于这种情况如何进一步做优化呢?可以通过配置 ~/.ssh/config 实现。默认情况下 ~/.ssh 目录下是没有 config 文件的,如果没有,我们可以自己创建一个。写入内容模板如下:

Host zsduo
    HostName 10.1.1.1
    User root
    Port 22
    IdentityFile ~/.ssh/id_rsa
  • Host 后面写此配置的别名,你可以起一个你好记的名字
  • HostName 写云服务器公网 IP 地址即可
  • User 写登录的用户名
  • Port 写 SSH 的端口号,如果端口号改了,请改成你的端口号
  • IdentityFile 密钥文件位置,不管是 linux 还是 win 系统,就像我代码中所写的即可

完成配置之后,我们可以在 cmd 中尝试代码 ssh zsduo 即可发现登录成功,是不是非常方便呢?

本文源自公众号:NightTeam,小胖狐通过消化吸收重新组织了文字。

扫描二维码,在手机上阅读!


文章评论