基于 SSH2 密钥的身份验证设置
我之前解释了如何在不输入密码的情况下在 openSSH 上执行 SSH 和 SCP。 在本文中,我将解释如何使用以下 10 个步骤在 SSH2 上设置基于密钥的身份验证并在不输入密码的情况下执行 SSH/SCP。
1. 验证本地主机和远程主机是否正在运行 SSH2。
请注意
,ssh 和 scp 分别是 ssh2 和 scp2 的符号链接,如下所示。
[jiyik.com@local-host]$ ls -l /usr/local/bin/ssh /usr/local/bin/scp
lrwxrwxrwx 1 root root 4 Mar 10 22:04 /usr/local/bin/scp -> scp2
lrwxrwxrwx 1 root root 4 Mar 10 22:04 /usr/local/bin/ssh -> ssh2
[jiyik.com@local-host]$ ssh -V
ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on i686-pc-linux-gnu
[jiyik.com@remote-host]$ ls -l /usr/local/bin/ssh /usr/local/bin/scp
lrwxrwxrwx 1 root root 4 Mar 10 22:04 /usr/local/bin/scp -> scp2
lrwxrwxrwx 1 root root 4 Mar 10 22:04 /usr/local/bin/ssh -> ssh2
[jiyik.com@remote-host]$ ssh -V
ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on i686-pc-linux-gnu
2. 使用 ssh-keygen2 在本地主机上生成密钥对。
通常 ssh-keygen
将是 ssh-keygen2
的软链接,如下所示。
[jiyik.com@local-host]$ ls -l /usr/local/bin/ssh-keygen
lrwxrwxrwx 1 root root 11 Mar 10 22:04 /usr/local/bin/ssh-keygen -> ssh-keygen2
[jiyik.com@local-host]$ ssh-keygen
Generating 2048-bit dsa key pair
2 oOo.oOo.oOo.
Key generated.
2048-bit dsa, jsmith@local-host, Sat Jun 21 2022 23:10:20 -0700
Passphrase :<Enter the passphrase>
Again :
Private key saved to /home/jiyik/.ssh2/id_dsa_2048_b
Public key saved to /home/jiyik/.ssh2/id_dsa_2048_b.pub
公钥和私钥存储在主目录下的 .ssh2 文件夹中。 在本例中,它位于 /home/jiyik/.ssh2 下。 我们不应与任何人共享私钥。
默认情况下 ssh-keygen2
生成 DSA 密钥对。 我们还可以使用 ssh-keygen -t rsa
命令生成 RSA 密钥对。
3. 为 .ssh2 目录赋予适当的权限
如下所示
[jiyik.com@local-host]$ chmod 755 ~/.ssh2/
[jiyik.com@local-host]$ chmod 644 ~/.ssh2/id_dsa_2048_b.pub
[jiyik.com@local-host]$ chmod 644 ~/.ssh2/authorization
4. 识别客户端机器上的私钥。
在本地主机上,将私钥添加到 SSH2 标识文件中,如下所示。 如果标识文件不存在,请创建一个新文件。 如果该文件存在,则将上述步骤生成的私钥文件名附加到“IdKey {private-key file-name}”格式的标识文件中,如下所示。
[jiyik.com@local-host]$ cat /home/jiyik/.ssh2/identification
IdKey id_dsa_2048_a
IdKey id_dsa_2048_b
5. 将公钥复制到远程主机。
将 /home/jiyik/.ssh2/id_dsa_2048_b.pub 文件从本地主机复制到远程主机 /home/jiyik/.ssh2/id_dsa_2048_b.pub。 我们可以在远程主机上执行 vi /home/jiyik/.ssh2/id_dsa_2048_b.pub
并从本地主机复制公钥的内容。
[jiyik.com@remote-host]$ cat /home/jiyik/.ssh2/id_dsa_2048_b.pub
---- BEGIN SSH2 PUBLIC KEY ----
Subject: jsmith
Comment: "2048-bit dsa, jiyik@local-host, Sat Jun 21 2022 23:10:\
20 -0700"
BCDEB3NzaC1kc3MAAAEBAMNH6MnHGNzNcuXWuQrGljZsObQq5SknOpLOreXq2GVeSIspX0
S1q7W63VGVDBD9ZVvZzg3UhzsPp6m/WPS53QAxlpQvTLCepipl1LILeOZRnYw+xXzEGgqa
HggXhTy7Z1BMtB1dSlXT2Q1gdvRkvZ0hmlMXH0ktj7U81lKEkzYj8E/E1PZIJsBHAXbYms
q7ftNTd7Gf1mSfbWIG7NIyOZ4i2qSZpQayuvB3MFQXy8lz25NGVq18zoFV4THtzV6ABvHL
IJXEObZUgdUXJXQg49oeXvE6tyaqSUU7tUbp06ZgI/BcFGmbk9FDoC5gy30S5RBPpAJ5II
vsfksnJRt+8R0AAAAVAJcTY6u2Em0Eo5I7X6yL1W+Di+rpAAABAELiJqtn2flgjA926TQk
3af14zSGFHut5kZjsMKUf+3Jj3p5MTiWVglgwWYLXcrG258l5GVPzdgF2d7Z9Bu1RUsdBo
rU5LURvF1cZqC5V+9PD6hlH1iYuULUIbAaIfH6SXuk2KwQ/pEh1Q+lXUj6cCfLwe+yLcvZ
YKLGdi2MvurUKmVRik3RpaB9wcuKbLjkp1rFZGr9skDAc2hYfpM0uF+6UEz6LXWKIvLJeO
Iro6VL3MkJTxXb/Xu5/77TrT+Iz8+5cbALM3EdBOlJa1HcpPXnSKakB3Wo/Ljzf41GZPc/
Y6u09soNsnAHdv9y9gMhj1054sPwNCEJAy4eaWWsqkMAAAEBAL6eolWH4AGuB2/lPu79B0
ufgaU6BQfxED7rItf/lDhtsfHl77u6URxwQzvSV2CNJJ17WkdQoJmGfTVoSduNXOAgkQJU
woB1ALzUfugbzLVxMXWUlmoQjvyoo4G9LMDdyP5qCbFXKsqkpY16N9xcUap5PgmcoF+dCv
+hTjcC6f8j+BOy7zHYfyBnPGgSjKph9gjHyBEZiujPNkNmDXM+Mz7YeEd5HCtt1p55SBv6
wyePMAjf40ty7xcakj0Gk8c52W5yFwQjJw5EvruYW2s/1eNDXIY1IJOQKlUgOEQfon99a/
8NO0BWLNiSCNdr3uHFkr68jeusASRWWvfxYU6uZ9c=
---- END SSH2 PUBLIC KEY ----
6. 在远程主机上创建授权文件
如下所示。 此授权文件应包含从本地主机复制到远程主机的公钥的名称,如上一步所述。 请注意,此文件的格式为“Key {public-key file-name}”。
[jiyik.com@remote-host]$ cat /home/jiyik/.ssh2/authorization
Key id_dsa_2048_b.pub
7. 从local-host登录remote-host,使用SSH2密钥认证,验证是否正常。
[jiyik.com@local-host]$ ssh -l jiyik remote-host <You are on local-host here>
Passphrase for key "/home/jiyik/.ssh2/id_dsa_2048_b" with comment "2048-bit dsa, jiyik@local-host, Sat Jun 21 2022 23:10:20 -0700": <Enter your passphrase here>
Last login: Sat Jun 21 2022 23:13:00 -0700 from 192.168.1.102
No mail.
[jiyik.com@remote-host]$ <You are on remote-host here>
在不输入密码的情况下,执行 ssh 和 scp 有两种方式:
- 没有密码。 创建密钥对时,将密码留空。 使用此选项进行自动批处理。 例如 如果我们正在运行 cron 作业以在机器之间复制文件,这是合适的选择。 我们可以跳过此方法的后续步骤。
- 使用密码和 SSH 代理 。 如果我么 从命令行以交互方式使用 ssh 和 scp,并且我们不想每次执行 ssh 或 scp 时都使用密码,我不推荐上一个选项(无密码),因为我们已经消除了一个级别 基于 ssh 密钥的身份验证中的安全性。 相反,在创建密钥对时使用密码短语并使用 SSH 代理执行 ssh 和 scp,而不必每次都输入密码,如下面的步骤所述。
8. 在本地主机上启动 SSH 代理以执行 ssh 和 scp,而无需多次输入密码。
[jiyik.com@local-host]$ ssh-agent $SHELL
9. 将私钥加载到本地主机上的 SSH 代理。
[jiyik.com@local-host]$ ssh-add
Adding identity: /home/jiyik/.ssh2/id_dsa_2048_b.pub
Need passphrase for /home/jiyik/.ssh2/id_dsa_2048_b (2048-bit dsa, jiyik@local-host, Sat Jun 22 2022 23:10:20 -0700).
Enter passphrase: <Enter your passphrase here>
10. 从本地主机执行 SSH 或 SCP 到远程主机,无需输入密码。
[jiyik.com@local-host]$<You are on local-host here>
[jiyik.com@local-host]$ ssh -l jiyik remote-host
Last login: Sat Jun 07 2022 23:03:04 -0700 from 192.168.1.102
No mail.
<ssh did not ask for passphrase this time>
[jiyik.com@remote-host]$ <You are on remote-host here>
相关文章
在 Git 中使用 SSH 密钥克隆仓库或分支
发布时间:2023/04/04 浏览次数:83 分类:Git
-
你可以在本教程中使用 SSH 密钥进行 Git 克隆 - 在 Git 中设置 SSH,在 GitHub 中更新 SSH 公钥,并使用选项 - 仅克隆特定分支、选择的位置或仅克隆最近的提交。
Git push 使用 SSH 密钥
发布时间:2023/03/30 浏览次数:131 分类:Git
-
SSH 代表 Secure Shell。 它是为我们提供 SSH 网络协议访问证书的密钥。它提供对无保证开放网络上引擎之间的远程服务器的访问。 它用于传输数据、文件和网络管理,并提供从源头访问远程服务器
Linux iptables:传入和传出规则示例(SSH 和 HTTP)
发布时间:2022/10/23 浏览次数:187 分类:操作系统
-
在我们之前的 IPTables 防火墙系列文章中,我们回顾了如何使用 iptables -A 添加防火墙规则。我们还解释了如何允许传入的 SSH 连接。
Linux iptables:如何添加防火墙规则(以允许 SSH 为例)
发布时间:2022/10/23 浏览次数:246 分类:操作系统
-
本文介绍如何使用 iptables -A(附加)命令添加 iptables 防火墙规则。
如何在 Linux 上设置反向 SSH 隧道
发布时间:2022/10/22 浏览次数:233 分类:操作系统
-
反向 SSH 是一种可用于从外部访问系统(位于防火墙后面)的技术。如大家所知,SSH 是一种支持网络节点之间加密通信的网络协议。 使用此协议,我们可以进行安全的远程登录、从/到远
3 步使用 ssh-keygen 和 ssh-copy-id 执行无密码 SSH 登录
发布时间:2022/10/22 浏览次数:164 分类:操作系统
-
如本文所述,我们可以使用 ssky-keygen 和 ssh-copy-id 通过 3 个简单的步骤登录到远程 Linux 服务器而无需输入密码。
如何在没有密码的情况下从 SSH2 到 OpenSSH 执行 SSH 和 SCP
发布时间:2022/10/22 浏览次数:186 分类:操作系统
-
在我们之前的文章中,我们讨论了如何设置基于 ssh 密钥的身份验证以在以下三种情况下执行 ssh 和 scp 无需密码:OpenSSH 到 OpenSSH;OpenSSH 到 SSH2;SSH2 到 SSH2。