建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
华为HDZ 主题:186帖子:4299

【技术干货】

SSH 免密码/免用户名/免IP登录云服务器实践

秦国首席剑... 2021/4/13 1353

SSH 是 Secure Shell 的缩写,耿直地翻译过来可以称作安全外壳协议。我们可以借助 SSH 协议连接到远程服务器并完成身份校验操作,也就是说使用了 SSH 密钥进行身份验证可以免去每次都输入密码的繁琐操作,同时账户安全性也得到大幅提高。

以 Centos 为例,SSH 默认存放在 ~/.ssh 目录下,我们可以通过 $cd ~/.ssh && ls 组合命令查看目录下存放的 SSH 密钥文件。如果目录下什么文件都没有代表服务器未生成 SSH 密钥,否则你将会看到类似 id_rsaid_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 即可。


在拥有多台服务器后,你就能感受到这种登录方式是多么的便捷,运维同学已经习以为常了呢!


回复0

没有评论
上划加载中
直达楼层
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

采纳成功

您已采纳当前回复为最佳回复
更新于2021年04月14日 13:49:52 1353 0
直达本楼层的链接
楼主
显示全部楼层
[技术干货] SSH 免密码/免用户名/免IP登录云服务器实践

SSH 是 Secure Shell 的缩写,耿直地翻译过来可以称作安全外壳协议。我们可以借助 SSH 协议连接到远程服务器并完成身份校验操作,也就是说使用了 SSH 密钥进行身份验证可以免去每次都输入密码的繁琐操作,同时账户安全性也得到大幅提高。

以 Centos 为例,SSH 默认存放在 ~/.ssh 目录下,我们可以通过 $cd ~/.ssh && ls 组合命令查看目录下存放的 SSH 密钥文件。如果目录下什么文件都没有代表服务器未生成 SSH 密钥,否则你将会看到类似 id_rsaid_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 即可。


在拥有多台服务器后,你就能感受到这种登录方式是多么的便捷,运维同学已经习以为常了呢!


举报
分享

分享文章到朋友圈

分享文章到微博

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册

结贴

您对问题的回复是否满意?
满意度
非常满意 满意 一般 不满意
我要反馈
0/200