Secure Shell (SSH) 是一种用于安全操作远程服务的加密网络协议。它用于使用通常在端口 22 上运行的客户端-服务器架构对安全通道上的设备进行远程操作。SSH 是 Telnet 的继承者。 SSH 使用公钥和私钥来验证和验证用户。 ssh-keygen 用于生成这些密钥对。
您可以在此处了解有关 SSH 和 Telnet 的更多信息
SSH 是如何工作的?
- SSH 协议需要有 2 对。公钥和私钥
- 公钥被添加到远程服务器(或)设备的特殊文件夹 $HOME/.ssh/authorized_keys 中。
- 当服务器发送任何使用公钥加密的响应时,由于只有客户端拥有私钥,它只能解密响应。
- 身份验证成功后,将创建一个 shell 会话或在远程服务器上执行请求的命令。
SSH-KEYGEN
ssh-keygen 是用于生成、管理和转换 SSH 身份验证密钥的实用程序。 ssh-keygen 在大多数操作系统中都随 SSH 一起安装。 ssh-keygen 能够使用三种不同的数字签名算法之一生成密钥。
- RSA
- 动态安全协议
- ECDSA
ssh-keygen 生成的文件
- $HOME/.ssh/identity:包含使用 SSH 协议版本 1 时的 RSA 私钥的文件。
- $HOME/.ssh/identity.pub:当您使用 SSH 协议版本时,包含用于身份验证的 RSA 公钥的文件
- $HOME/.ssh/id_dsa:包含用户的协议版本 2 DSA 身份验证身份的文件。
- $HOME/.ssh/id_dsa.pub:当您使用 SSH 协议版本时,包含用于身份验证的 DSA 公钥的文件。
- $HOME/.ssh/id_rsa:包含用户的协议版本 2 RSA 身份验证身份的文件。除了用户之外,任何人都不应读取此文件。
- $HOME/.ssh/id_rsa.pub:包含用于身份验证的协议版本 2 RSA 公钥的文件。
“.pub”文件应复制到用户想要使用 SSH 身份验证登录的远程系统的 $HOME/.ssh/authorized_keys 文件中。
使用 ssh-keygen 生成密钥对
几乎所有 Unix 和 Linux 发行版都预装了 SSH 和 ssh-keygen,因此我们无需安装。我们将直接开始。这个过程几乎与几乎所有 Linux Distros 的相似
打开终端并输入 ssh-keygen
ssh-keygen
它要求提供 ssh 密钥对的名称。如果您想输入密码,请继续,ssh-keygen 将自动创建您的密钥。
//Output
Generating public/private rsa key pair.
// enter the name for ssh key pairs
Enter file in which to save the key (/home/kushwanth/.ssh/id_rsa): gfg
// enter passpharse for security
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
// ssh keys generated
Your identification has been saved in gfg
Your public key has been saved in gfg.pub
公钥如下所示。
这是您需要复制到远程设备才能成功进行 SSH 身份验证的密钥。
将公钥复制到远程服务器
创建密钥对后,现在我们需要将公钥复制到服务器中。有两种方法可以做到这一点,使用 ssh-copy-id(或)手动将其复制到服务器中。
使用 ssh-copy-id
使用 ssh-copy-id 命令将您的公钥文件(例如,$HOME/.ssh/id_rsa.pub)复制到您在远程服务器上的用户帐户。
ssh-copy-id -i $HOME/.ssh/id_rsa.pub
手动复制公钥
使用密码登录远程服务器并在 $HOME/.ssh 中创建一个目录。您可以使用下面的命令。
ssh
- ssh
@ 允许您登录远程主机服务器 - 如果 .ssh 目录已经存在,它会将目录的权限设置为 077,以便它允许文件所有者的读取、写入和执行权限,但禁止其他所有人的读取、写入和执行权限。
- 如果该目录不存在,那么它将创建一个新目录。
现在将您的公钥发送到远程服务器,
cat $HOME/.ssh/id_rsa.pub | ssh
- cat 允许您在终端中打印文件的内容。
- cat 的输出通过管道传输到 SSH 以将公钥附加到远程服务器。
现在您可以注销并测试是否可以使用 SSH 协议连接到远程服务器。