如何在Linux服务器之间交换SSH密钥以实现无密码认证?

在Linux上实现基于SSH密钥的身份验证

SSH(Secured Shell)是一种在SSH客户端和远程服务器之间创建加密连接的协议。

使用SSH可以安全地管理和管理远程服务器。这在很多方面都很有帮助。

  • 多服务器部署
  • 远程停止/启动服务
  • 自动化

以及所有您的创意(希望如此)…

作为系统管理员,这是基础知识。

让我们学习如何…

我将生成一对私钥和公钥。私钥应存储在您的ssh客户端机器上,并且必须保持安全。公钥必须复制到远程服务器以便从SSH客户端机器登录到该服务器而无需密码。

您将学到以下内容。

  • 安装SSH(如果已安装,则无需安装)
  • 生成SSH密钥
  • 将SSH密钥复制到远程服务器
  • 使用SSH登录到远程服务器

为了演示目的,我有两个具有以下IP地址的服务器,一个是客户端系统,另一个是服务器,我将通过ssh从客户端机器登录到该服务器。

  • 客户端(用户-> yaoweibin):192.168.56.102
  • 远程(用户-> ubuntu):192.168.56.101

安装SSH

在按照本文中提到的步骤之前,确保服务器上已安装openssh-server。如果尚未安装,请运行以下命令进行安装。

sudo apt-get install openssh-server

sudo systemctl enable ssh

sudo systemctl start ssh

您可以运行ssh命令来检查系统是否安装了它。

yaoweibin@yaoweibin:~$ ssh

usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]

           [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]

           [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]

           [-i identity_file] [-J [user@]host[:port]] [-L address]

           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]

           [-Q query_option] [-R address] [-S ctl_path] [-W host:port]

           [-w local_tun[:remote_tun]] destination [command]

生成SSH密钥

这需要在客户端服务器上完成。

运行ssh-keygen命令生成SSH密钥。当它询问文件、密码短语和相同密码短语时,只需按Enter键。它会默认在~/.ssh目录中生成一对密钥。id_rsa是私钥,id_rsa.pub是相关的公钥。

yaoweibin@yaoweibin:~$ ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/home/yaoweibin/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/yaoweibin/.ssh/id_rsa.

Your public key has been saved in /home/yaoweibin/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:3XDm62tzJegGm8oAmFYCyeFZovJOuU42zNgyn9GzH30 yaoweibin@yaoweibin

The key's randomart image is:

+---[RSA 2048]----+

|o+..             |

|+o+              |

|oo. .     . o    |

|.. *     . *     |

|  B .   S . o.   |

| O o . .  . ... .|

|+ @ o o . E=.  o |

| B + o + .o.= .  |

|  + ... o. oo+   |

+----[SHA256]-----+

它会在~/.ssh目录中生成两个新文件。

将SSH密钥复制到远程服务器

私钥应复制到远程服务器的~/.ssh文件夹中。大多数服务器应已经拥有此文件夹,如果没有,您需要创建一个文件夹。

为此,执行以下操作:

  • 使用要连接的用户登录到远程服务器。在我的情况下,用户名是ubuntu
  • 确保当前工作目录是用户的主目录,然后创建一个.ssh文件夹。你也可以使用以下单个命令创建一个
mkdir -p ~/.ssh

如果你已经有了.ssh文件夹,请备份它。

接下来,让我们将公钥从客户端服务器推送到远程服务器。

在客户端机器上(192.168.56.102),运行以下命令将公钥复制到远程服务器的.ssh目录中的authorized_keys文件中。

yaoweibin@yaoweibin:~$ cat .ssh/id_rsa.pub | ssh [email protected] 'cat >> .ssh/authorized_keys'

[email protected]的密码:

运行以下命令在远程服务器上设置authorized_keys文件的权限。

yaoweibin@yaoweibin:~$ ssh [email protected] "chmod 700 .ssh; chmod 640 .ssh/authorized_keys"

太好了,密钥交换和权限设置完成。

使用SSH登录到远程服务器

让我们测试一下看看是否可以工作!

让我们作为yaoweibin用户从客户端机器(192.168.56.102)登录到远程服务器(192.168.56.101)。

运行以下命令进行测试,这次不会询问密码。

yaoweibin@yaoweibin:~$ ssh [email protected]

欢迎使用Ubuntu 16.04.6 LTS(GNU / Linux 4.4.0-151-generic i686)

 * 文档:  https://help.ubuntu.com

 * 管理:     https://landscape.canonical.com

 * 支持:        https://ubuntu.com/advantage

可更新346个软件包。

有11个安全更新。

上次登录时间:周一6月17日00:10:32 2019年

就这样。

我已经成功登录到远程服务器。运行以下命令将提供远程机器的IP详细信息。

ubuntu@ubuntu:~$ ifconfig

enp0s3    链路类型:以太网  硬件地址:08:00:27:9b:47:86 

          inet 地址:10.0.2.15  广播:10.0.2.255  掩码:255.255.255.0

          inet6 地址:fe80::5c62:3267:b752:fe5d/64 范围:链接

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          接收数据包:20239 错误:0 丢弃:0 过载:0 帧:0

          发送数据包:5406 错误:0 丢弃:0 过载:0 载体:0

          碰撞:0 txqueuelen:1000

          接收字节:22678039(22.6 MB)  发送字节:701710(701.7 KB)

enp0s8    链路类型:以太网  硬件地址:08:00:27:a9:4a:6b 

          inet 地址:192.168.56.101  广播:192.168.56.255  掩码:255.255.255.0

          inet6 地址:fe80::54a9:761c:9034:21a2/64 范围:链接

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          接收数据包:330 错误:0 丢弃:0 过载:0 帧:0

          发送数据包:197 错误:0 丢弃:0 过载:0 载体:0

          碰撞:0 txqueuelen:1000

          接收字节:42847(42.8 KB)  发送字节:32774(32.7 KB)

lo        链路类型:本地环回 

          inet 地址:127.0.0.1  掩码:255.0.0.0

          inet6 地址:::1/128 范围:主机

          UP LOOPBACK RUNNING  MTU:65536  Metric:1

          接收数据包:997 错误:0 丢弃:0 过载:0 帧:0

          发送数据包:997 错误:0 丢弃:0 过载:0 载体:0

          碰撞:0 txqueuelen:1

          接收字节:79654(79.6 KB)  发送字节:79654(79.6 KB)

结论

如你所见,设置SSH密钥交换非常简单。希望这对你有所帮助,如果你有兴趣学习Linux管理和故障排除,请查看这个Udemy course

类似文章