SSH 是 Secure Shell 的缩写,耿直地翻译过来能够称做安全外壳协议。咱们能够借助 SSH 协议链接到远程服务器并完成身份校验操做,也就是说使用了 SSH 密钥进行身份验证能够免去每次都输入密码的繁琐操做,同时帐户安全性也获得大幅提升。html
以 Centos 为例,SSH 默认存放在 ~/.ssh
目录下,咱们能够经过 $cd ~/.ssh && ls
组合命令查看目录下存放的 SSH 密钥文件。若是目录下什么文件都没有表明服务器未生成 SSH 密钥,不然你将会看到相似 id_rsa
和 id_rsa.pub
这样的文件。算法
业内工程师一般会使用非对称算法 RSA 来生成一对密钥——公钥和私钥,在终端输入如下命令:vim
ssh-keygen -t rsa -C "vansenb@foxmail.com"
参数 -t
和 -C
并不是必填项,但咱们能够借助它们来指定生成时候使用的算法(RSA)和我的标识(邮箱)。ssh-keygen
的完整含义是 ssh key generating
,也就是生成 SSH 键(密钥)。输入上方命令并回车,终端会给出以下提示:安全
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa):
第一行是提醒咱们正在生成一对密钥;第二行则是让咱们选择密钥存放的文件路径,一般咱们都会选择使用默认路径,此时不用输入任何路径,直接回车便可;回车后终端给出以下提示:服务器
Enter passphrase (empty for no passphrase):
它提示咱们输入一串密码短语,这里不输入任何值也不会影响生成结果,直接回车便可;回车后终端给出以下提示:运维
Enter same passphrase again:
这里是让咱们再次输入一遍密码短语,省得咱们在第一次输入的时候误操做。若是上一步没有输入值,那么这里也直接回车便可;回车后终端给出以下提示:dom
Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:/k7eBzEwIUHIjh0osGBEkoRMLKKbCV4XzyhHJ3ffsj0 vansenb@foxmail.com The key's randomart image is: +---[RSA 3072]----+ |%O o o+... | |O+. .++o oo | |= ..+O.. .o. | |o o.+oo oo. | |o+. + S +o | |+. . ..E | | . . .. | | + . . | | .+ .. | +----[SHA256]-----+
从提示中咱们能够看到密钥存放的文件路径,默认状况下公钥和私钥都存放在 ~/.ssh
目录下,这也是为何一开始咱们要去 ~/.ssh
目录下查看密钥文件的缘由。ssh
一般状况下,咱们会用 ssh username@ip
命令登陆服务器,执行命令后终端会提示咱们输入密码。更好的作法是借助 SSH 密钥帮助咱们验证身份,直接省去输入密码的步骤。编辑器
前面学会了如何生成 SSH 密钥,接下来咱们将学习如何实现云服务器的免密登陆。首先按照上面的介绍在本身的计算机上生成密钥对,并复制公钥文件 ~/.ssh/id_rsa.pub
中的内容(能够用 cat ~/.ssh/id_rsa.pub
命令查看公钥文件内容),也就是下面一长串ide
ssh-rsa AAAA ... ... 5ztuiXs= vansenb@foxmail.com
从 ssh-rsa
开始,直到我的标识结束,所有复制。
接下来到目标服务器(也就是你想要免密登陆的云服务器,假设云服务器的公网 IP 是 10.1.1.1)上操做。在云服务器的 ~/.ssh
目录下新建一个名为 authorized_keys
的文件,并将刚才复制的你的我的计算机生成的公钥字符串写入到 authorized_keys
中。若是你使用的是 vim 编辑器,那么命令以下:
$ cd ~/.ssh $ vim authorized_keys
使用 vim 编辑器打开文件后按 i
键进入编辑模式,使用键盘快捷键 Ctr 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 ~]#
这表明咱们不须要输入密码便可经过 SSH 协议链接远端服务器了,免密登陆成功!
有些服务器中的 sshd
服务配置并未开启公钥登陆选项,若是上面的 ssh root@10.1.1.1
回车后终端显示的不是云服务器相关信息,而是输入密码的话,就须要咱们到云服务器上开启 sshd
服务的公钥登陆配置。
在云服务器上执行 $ vim /etc/ssh/sshd_config
命令,进入到 sshd
配置文件后找到 PubkeyAuthentication
项,删除该项的注释符 #
并确保该项对应的开关为 yes
。错误的配置和正确的配置以下:
#PubkeyAuthentication no # -> 错误的配置 PubkeyAuthentication yes # -> 正确的配置
一顿操做猛如虎,操做完以后从新启动 sshd
服务,重启命令为 service sshd restart
。
这时候再在我的计算机中执行 ssh root@10.1.1.1
命令,就不会让你输入密码了,免密登陆成功!
:::tip
固然,除了用我的计算机链接云服务器以外,云服务器与云服务器之间也能够这么配置。
:::
虽然咱们省去了输入密码的步骤,不过用户名和 IP 地址也不短。若是想要省略用户名和 IP 地址,能够经过配置 ~/.ssh/config
实现。默认状况下 ~/.ssh
目录下是没有 config
文件的。咱们能够经过 $ vim ~/.ssh/config
建立。接着写入如下配置信息:
Host s-crawl HostName 10.1.1.1 Port 22 User root IdentityFile ~/.ssh/id_rsa
其中 Host
表明云服务器昵称、HostName
为云服务器的公网 IP 地址、Port
表明链接时使用的端口号、User
表明链接时选用的用户名、IdentityFile
表明本地私钥文件的路径。配置完成后退出编辑器,这时候咱们就能够用云服务器昵称登陆云服务器啦,在终端输入 $ ssh s-crawl
便可。
文章首发于 韦世东的技术专栏 http://www.weishidong.com/blo...
在拥有多台服务器后,你就能感觉到这种登陆方式是多么的便捷,运维同窗已经习觉得常了呢!