Linux : 基于 SSH2 密钥的身份验证设置综合指南

网友投稿 919 2022-05-30

我之前解释了如何在 openSSH 上不输入密码的情况下执行 SSH 和 SCP。在本文中,我将通过以下 10 个步骤说明如何在SSH2上设置基于密钥的身份验证并在不输入密码的情况下执行 SSH/SCP。

1. 验证本地主机和远程主机是否正在运行 SSH2。请注意,ssh 和 scp 分别是到 ssh2 和 scp2 的符号链接,如下所示。

[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 [local-host]$ ssh -V ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on i686-pc-linux-gnu [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 [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 的软链接,如下所示。

[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 [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 2008 23:10:20 -0700 Passphrase : Again : Private key saved to /home/jsmith/.ssh2/id_dsa_2048_b Public key saved to /home/jsmith/.ssh2/id_dsa_2048_b.pub

公钥和私钥存储在您的主目录下的 .ssh2 文件夹中。在此示例中,它位于 /home/jsmith/.ssh2 下。您不应该与任何人共享私钥。

默认情况下 ssh-keygen2 生成 DSA 密钥对。您还可以使用以下命令生成 RSA 密钥对:ssh-keygen -t rsa命令。

3. 给 .ssh2 目录赋予适当的权限,如下所示。

[local-host]$ chmod 755 ~/.ssh2/ [local-host]$ chmod 644 ~/.ssh2/id_dsa_2048_b.pub [local-host]$ chmod 644 ~/.ssh2/authorization

4. 识别客户端机器上的私钥。在本地主机上,将私钥添加到 SSH2 标识文件中,如下所示。如果标识文件不存在,则创建一个新文件。如果该文件存在,则将上述步骤生成的私钥文件名以“ IdKey {private-key file-name} ”格式附加到标识文件中,如下所示。

[local-host]$ cat /home/jsmith/.ssh2/identification IdKey id_dsa_2048_a IdKey id_dsa_2048_b

5. 将公钥复制到远程主机。

将 /home/jsmith/.ssh2/id_dsa_2048_b.pub 文件从本地主机复制到远程主机 /home/jsmith/.ssh2/id_dsa_2048_b.pub。您可以在远程主机上执行 vi /home/jsmith/.ssh2/id_dsa_2048_b.pub 并从本地主机复制公钥的内容。

[remote-host]$ cat /home/jsmith/.ssh2/id_dsa_2048_b.pub ---- BEGIN SSH2 PUBLIC KEY ---- Subject: jsmith Comment: "2048-bit dsa, jsmith@local-host, Sat Jun 21 2020 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} ”。

[remote-host]$ cat /home/jsmith/.ssh2/authorization Key id_dsa_2048_b.pub

7. 使用SSH2密钥认证从local-host登录到remote-host,验证是否正常。

[local-host]$ ssh -l jsmith remote-host Passphrase for key "/home/jsmith/.ssh2/id_dsa_2048_b" with comment "2048-bit dsa, jsmith@local-host, Sat Jun 21 2008 23:10:20 -0700": Last login: Sat Jun 21 2020 23:13:00 -0700 from 192.168.1.102 No mail. [remote-host]$

有两种方法可以在不输入密码的情况下执行 ssh 和 scp:

没有密码。创建密钥对时,请将密码留空。将此选项用于自动批处理。例如,如果您正在运行 cron 作业以在机器之间复制文件,这是合适的选项。您可以跳过此方法的后续步骤。

使用密码和 SSH 代理。如果您在命令行中以交互方式使用 ssh 和 scp 并且不想在每次执行 ssh 或 scp 时都使用密码,我不建议使用前一个选项(无密码),因为您已经消除了一个级别基于 ssh 密钥的身份验证中的安全性。相反,在创建密钥对时使用密码短语并使用 SSH 代理执行 ssh 和 scp,而无需每次都输入密码,如下面的步骤所述。

8. 在本地主机上启动 SSH 代理以执行 ssh 和 scp,而无需多次输入密码。

[local-host]$ ssh-agent $SHELL

9. 将私钥加载到本地主机上的 SSH 代理。

[local-host]$ ssh-add Adding identity: /home/jsmith/.ssh2/id_dsa_2048_b.pub Need passphrase for /home/jsmith/.ssh2/id_dsa_2048_b (2048-bit dsa, jsmith@local-host, Sat Jun 22 2020 23:10:20 -0700). Enter passphrase:

10. 在不输入密码的情况下,从本地主机执行 SSH 或 SCP 到 remote-home。

[local-host]$ [local-host]$ ssh -l jsmith remote-host Last login: Sat Jun 07 2020 23:03:04 -0700 from 192.168.1.102 No mail. [remote-host]$

Linux : 基于 SSH2 密钥的身份验证设置综合指南

Linux ssh

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:敏捷史话(十七):维基(Wiki)背后的灵感来源—— Ward Cunningham
下一篇:Linux : 如何在没有密码的情况下从 SSH2 到 OpenSSH 执行 SSH 和 SCP
相关文章