zhcn 技术 手机 非公開: 如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?

如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?

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

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

SSH 允许您安全地管理和管理远程服务器。这在很多方面都有帮助。

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

以及你所有的创造力(希望)……

作为系统管理员,这是必须了解的基本知识。

让我们学习如何…

生成私钥和公钥。私钥必须存储在 ssh 客户端计算机上并保持安全。要从 SSH 客户端计算机无需密码登录远程服务器,您需要将公钥复制到远程服务器。

学习:

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

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

  • 客户端(用户 -> ):192.168.56.102
  • 远程(用户-> ubuntu):192.168.56.101
如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?
如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?

安装SSH

在执行本文中描述的步骤之前,请确保您的服务器上已安装openssh-server 。如果未安装,请运行以下命令进行安装。

 sudo apt-get install openssh-server

sudo systemctl enable ssh

sudo systemctl start ssh

您可以通过运行 ssh 命令来检查它是否已安装在您的系统上。

 @:~$ 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] 
如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?
如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?

生成 SSH 密钥

这必须在客户端服务器上完成。

通过运行ssh-keygen命令生成 SSH 密钥。当提示输入文件、密码和相同的密码时,只需按 Enter 键即可。默认情况下,密钥对在 ~/.ssh 目录中生成。 Id_rsa 是私钥,id_rsa.pub 是关联的公钥。

 @:~$ ssh-keygen

Generating public/private rsa key pair.

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

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

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

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

The key fingerprint is:

SHA256:3XDm62tzJegGm8oAmFYCyeFZovJOuU42zNgyn9GzH30 @

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目录中生成两个新文件。

如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?
如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?

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

必须将私钥复制到远程服务器上的~/.ssh文件夹。该文件夹应该已经存在于大多数服务器上。如果该文件夹不存在,则需要创建该文件夹。

为此:

  • 以您要连接的用户身份登录远程服务器。就我而言,它是ubuntu
  • 确保当前工作目录是用户的主目录并创建 .ssh 文件夹。您还可以使用一个命令创建以下命令:
 mkdir -p ~/.ssh

如果您已有 .ssh 文件夹,请为其创建备份。

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

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

 @:~$ cat .ssh/id_rsa.pub | ssh ubuntu@192.168.56.101 'cat >> .ssh/authorized_keys'

ubuntu@192.168.56.101's password:

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

 @:~$ ssh ubuntu@192.168.56.101 "chmod 700 .ssh; chmod 640 .ssh/authorized_keys"

现在密钥已交换并且权限已全部设置。

如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?
如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?

使用 SSH 登录远程服务器

我们来测试一下是否有效!

让我们以客户端计算机 (192.168.56.102) 的用户身份登录远程服务器 (192.168.56.101)。

通过运行以下命令进行测试。这次将不会要求您输入密码。

 @:~$ ssh ubuntu@192.168.56.101

Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-151-generic i686)

 * Documentation:  https://help.ubuntu.com

 * Management:     https://landscape.canonical.com

 * Support:        https://ubuntu.com/advantage

346 packages can be updated.

11 updates are security updates.

Last login: Mon Jun 17 00:10:32 2019 from 192.168.56.101

请…

您已成功登录远程服务器。以下命令显示远程计算机的 IP 详细信息。

 ubuntu@ubuntu:~$ ifconfig

enp0s3    Link encap:Ethernet  HWaddr 08:00:27:9b:47:86 

          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0

          inet6 addr: fe80::5c62:3267:b752:fe5d/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:20239 errors:0 dropped:0 overruns:0 frame:0

          TX packets:5406 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:22678039 (22.6 MB)  TX bytes:701710 (701.7 KB)

enp0s8    Link encap:Ethernet  HWaddr 08:00:27:a9:4a:6b 

          inet addr:192.168.56.101  Bcast:192.168.56.255  Mask:255.255.255.0

          inet6 addr: fe80::54a9:761c:9034:21a2/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:330 errors:0 dropped:0 overruns:0 frame:0

          TX packets:197 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:42847 (42.8 KB)  TX bytes:32774 (32.7 KB)

lo        Link encap:Local Loopback 

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:65536  Metric:1

          RX packets:997 errors:0 dropped:0 overruns:0 frame:0

          TX packets:997 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1

          RX bytes:79654 (79.6 KB)  TX bytes:79654 (79.6 KB)

结论

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

如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?
如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?

对“如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?”的简单易懂的解释您必须观看的最佳 2 个视频

公開鍵認証でwindowsからlinuxにSSHしよう!【インフラエンジニア】【セキュリティエンジニア】【ハッカー】
https://www.youtube.com/watch?v=gZWFb4y0mAw&pp=ygWIASBMaW51eCDjgrXjg7zjg5Djg7zplpPjgafjg5Hjgrnjg6_jg7zjg4njgarjgZfjga7 oqo3oqLzjga7jgZ_jgoHjgasgU1NIIOOCreODvOOCkuS6pOaPm-OBmeOCi-OBq-OBr-OBqeOBhuOBmeOCjOOBsOOCiOOBhoOBp-OBmeOBiz8maGw9SkE%3D
sshキーの作成 & githubとssh接続する方法
https://www.youtube.com/watch?v=5Vndfy68yho&pp=ygWIASBMaW51eCDjgrXjg7zjg5Djg7zplpPjgafjg5Hjgrnjg6_jg7zjg4njgarjgZfjga7 oqo3oqLzjga7jgZ_jgoHjgasgU1NIIOOCreODvOOCkuS6pOaPm-OBmeOCi-OBq-OBr-OBqeOBhuOBmeOCjOOBsOOCiOOBhoOBp-OBmeOBiz8maGw9SkE%3D

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

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

SSH 允许您安全地管理和管理远程服务器。这在很多方面都有帮助。

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

以及你所有的创造力(希望)……

作为系统管理员,这是必须了解的基本知识。

让我们学习如何…

生成私钥和公钥。私钥必须存储在 ssh 客户端计算机上并保持安全。要从 SSH 客户端计算机无需密码登录远程服务器,您需要将公钥复制到远程服务器。

学习:

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

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

  • 客户端(用户 -> ):192.168.56.102
  • 远程(用户-> ubuntu):192.168.56.101
如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?
如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?

安装SSH

在执行本文中描述的步骤之前,请确保您的服务器上已安装openssh-server 。如果未安装,请运行以下命令进行安装。

 sudo apt-get install openssh-server

sudo systemctl enable ssh

sudo systemctl start ssh

您可以通过运行 ssh 命令来检查它是否已安装在您的系统上。

 @:~$ 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] 
如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?
如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?

生成 SSH 密钥

这必须在客户端服务器上完成。

通过运行ssh-keygen命令生成 SSH 密钥。当提示输入文件、密码和相同的密码时,只需按 Enter 键即可。默认情况下,密钥对在 ~/.ssh 目录中生成。 Id_rsa 是私钥,id_rsa.pub 是关联的公钥。

 @:~$ ssh-keygen

Generating public/private rsa key pair.

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

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

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

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

The key fingerprint is:

SHA256:3XDm62tzJegGm8oAmFYCyeFZovJOuU42zNgyn9GzH30 @

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目录中生成两个新文件。

如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?
如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?

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

必须将私钥复制到远程服务器上的~/.ssh文件夹。该文件夹应该已经存在于大多数服务器上。如果该文件夹不存在,则需要创建该文件夹。

为此:

  • 以您要连接的用户身份登录远程服务器。就我而言,它是ubuntu
  • 确保当前工作目录是用户的主目录并创建 .ssh 文件夹。您还可以使用一个命令创建以下命令:
 mkdir -p ~/.ssh

如果您已有 .ssh 文件夹,请为其创建备份。

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

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

 @:~$ cat .ssh/id_rsa.pub | ssh ubuntu@192.168.56.101 'cat >> .ssh/authorized_keys'

ubuntu@192.168.56.101's password:

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

 @:~$ ssh ubuntu@192.168.56.101 "chmod 700 .ssh; chmod 640 .ssh/authorized_keys"

现在密钥已交换并且权限已全部设置。

如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?
如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?

使用 SSH 登录远程服务器

我们来测试一下是否有效!

让我们以客户端计算机 (192.168.56.102) 的用户身份登录远程服务器 (192.168.56.101)。

通过运行以下命令进行测试。这次将不会要求您输入密码。

 @:~$ ssh ubuntu@192.168.56.101

Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-151-generic i686)

 * Documentation:  https://help.ubuntu.com

 * Management:     https://landscape.canonical.com

 * Support:        https://ubuntu.com/advantage

346 packages can be updated.

11 updates are security updates.

Last login: Mon Jun 17 00:10:32 2019 from 192.168.56.101

请…

您已成功登录远程服务器。以下命令显示远程计算机的 IP 详细信息。

 ubuntu@ubuntu:~$ ifconfig

enp0s3    Link encap:Ethernet  HWaddr 08:00:27:9b:47:86 

          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0

          inet6 addr: fe80::5c62:3267:b752:fe5d/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:20239 errors:0 dropped:0 overruns:0 frame:0

          TX packets:5406 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:22678039 (22.6 MB)  TX bytes:701710 (701.7 KB)

enp0s8    Link encap:Ethernet  HWaddr 08:00:27:a9:4a:6b 

          inet addr:192.168.56.101  Bcast:192.168.56.255  Mask:255.255.255.0

          inet6 addr: fe80::54a9:761c:9034:21a2/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:330 errors:0 dropped:0 overruns:0 frame:0

          TX packets:197 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:42847 (42.8 KB)  TX bytes:32774 (32.7 KB)

lo        Link encap:Local Loopback 

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:65536  Metric:1

          RX packets:997 errors:0 dropped:0 overruns:0 frame:0

          TX packets:997 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1

          RX bytes:79654 (79.6 KB)  TX bytes:79654 (79.6 KB)

结论

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

如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?
如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?

对“如何在 Linux 服务器之间交换 SSH 密钥以进行无密码身份验证?”的简单易懂的解释您必须观看的最佳 2 个视频

公開鍵認証でwindowsからlinuxにSSHしよう!【インフラエンジニア】【セキュリティエンジニア】【ハッカー】
https://www.youtube.com/watch?v=gZWFb4y0mAw&pp=ygWIASBMaW51eCDjgrXjg7zjg5Djg7zplpPjgafjg5Hjgrnjg6_jg7zjg4njgarjgZfjga7 oqo3oqLzjga7jgZ_jgoHjgasgU1NIIOOCreODvOOCkuS6pOaPm-OBmeOCi-OBq-OBr-OBqeOBhuOBmeOCjOOBsOOCiOOBhoOBp-OBmeOBiz8maGw9SkE%3D
sshキーの作成 & githubとssh接続する方法
https://www.youtube.com/watch?v=5Vndfy68yho&pp=ygWIASBMaW51eCDjgrXjg7zjg5Djg7zplpPjgafjg5Hjgrnjg6_jg7zjg4njgarjgZfjga7 oqo3oqLzjga7jgZ_jgoHjgasgU1NIIOOCreODvOOCkuS6pOaPm-OBmeOCi-OBq-OBr-OBqeOBhuOBmeOCjOOBsOOCiOOBhoOBp-OBmeOBiz8maGw9SkE%3D