共计 3118 个字符,预计需要花费 8 分钟才能阅读完成。
SSH 是 Secure Shell 的缩写,正直地翻译过去能够称作平安外壳协定。咱们能够借助 SSH 协定连贯到近程服务器并实现身份校验操作,也就是说应用了 SSH 密钥进行身份验证能够免去每次都输出明码的繁琐操作,同时账户安全性也失去大幅提高。
以 Centos 为例,SSH 默认寄存在 ~/.ssh
目录下,咱们能够通过 $cd ~/.ssh && ls
组合命令查看目录下寄存的 SSH 密钥文件。如果目录下什么文件都没有代表服务器未生成 SSH 密钥,否则你将会看到相似 id_rsa
和 id_rsa.pub
这样的文件。
生成 SSH 密钥
业内工程师通常会应用非对称算法 RSA 来生成一对密钥——公钥和私钥,在终端输出以下命令:
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:
这里是让咱们再次输出一遍明码短语,省得咱们在第一次输出的时候误操作。如果上一步没有输出值,那么这里也间接回车即可;回车后终端给出如下提醒:
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 username@ip
命令登录服务器,执行命令后终端会提醒咱们输出明码。更好的做法是借助 SSH 密钥帮忙咱们验证身份,间接省去输出明码的步骤。
后面学会了如何生成 SSH 密钥,接下来咱们将学习如何实现云服务器的免密登录。首先依照下面的介绍 在本人的计算机上 生成密钥对,并复制公钥文件 ~/.ssh/id_rsa.pub
中的内容(能够用 cat ~/.ssh/id_rsa.pub
命令查看公钥文件内容),也就是上面一长串
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 地址也不短。如果想要省略用户名和 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…
在领有多台服务器后,你就能感触到这种登录形式是如许的便捷,运维同学曾经司空见惯了呢!