Linux : 如何在没有密码的情况下从 SSH2 到 OpenSSH 执行 SSH 和 SCP

网友投稿 760 2022-05-30

在我们之前的文章中,我们讨论了如何在以下三种情况下设置基于 ssh 密钥的身份验证以执行 ssh 和 scp 无需密码:

OpenSSH 到 OpenSSH

OpenSSH 到 SSH2

SSH2 到 SSH2

在本文中,我将解释如何在没有密码的情况下从 SSH2(本地主机)到 OpenSSH(远程主机)执行 ssh 和 scp。

1. 识别本地主机和远程主机的 SSH 版本

在此示例中,local-host 运行 SSH2,而 remote-host 运行 OpenSSH。

[local-host]$ ssh -V ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on i686-pc-linux-gnu [remote-host]$ ssh -V OpenSSH_4.3p2, OpenSSL 0.9.8b 04 May 2019

2.在本地主机上使用ssh-keygen2生成SSH2认证密钥对

在 SSH2 上,ssh-keygen 将是到 ssh-keygen2 的软链接,如下所示。

[local-host]$ ls -l /usr/local/bin/ssh-keygen lrwxrwxrwx 1 root root 11 Jul 31 2006 /usr/local/bin/ssh-keygen -> ssh-keygen2 [local-host]$ ssh-keygen Generating 2048-bit dsa key pair 7 o.oOo..oOo.o Key generated. 2048-bit dsa, tiamo@local-host, Sun Oct 19 2020 14:49:42 -0700 Passphrase : [Enter the password here] Again : Private key saved to /home/tiamo/.ssh2/id_dsa_2048_a Public key saved to /home/tiamo/.ssh2/id_dsa_2048_a.pub

公钥和私钥存储在您的主目录下的 .ssh2 文件夹中。在此示例中,它位于 /home/tiamo/.ssh2 下。

您不应该与任何人共享私钥。

默认情况下ssh-keygen2生成 DSA(数字签名算法)密钥对。您还可以生成 RSA 密钥对,如下所示。

[local-host]$ ssh-keygen -t rsa

3. 将 SSH2 公钥从本地主机复制到运行 OpenSSH 的远程主机

将本地主机:/home/jsmith/.ssh2/id_dsa_2048_a.pub 文件复制到远程主机:/home/jsmith/.ssh/id_dsa_1024_a.pub。在远程主机上执行 vi /home/jsmith/.ssh/id_dsa_1024_b.pub 并从本地主机复制公钥的内容。

Linux : 如何在没有密码的情况下从 SSH2 到 OpenSSH 执行 SSH 和 SCP

[remote-host]$ vi /home/tiamo/.ssh/id_dsa_1024_a.pub ---- BEGIN SSH2 PUBLIC KEY ---- Subject: tiamo Comment: "2048-bit dsa, jsmith@local-host Sun Oct 19 2008 14:49:42 -070

[remote-host]$ vi /home/tiamo/.ssh/id_dsa_1024_a.pub ---- BEGIN SSH2 PUBLIC KEY ---- Subject: tiamo Comment: "2048-bit dsa, jsmith@local-host Sun Oct 19 2008 14:49:42 -070\0" 7ZTVd7H63VyVqBIqfmEBALVa6VKtALZkydlOiPasikEQfujH07tjW+OffaRufFDG0VQESj 5iGSvMtmBBj8wQxGlvJ/dayVqBvvHzMao8bwGC+HFUtH1un7uyIEwOqU1fNzEpghC97mIx tIxJA7ZTVd7H63VIqmzlLbp/ZCd6bcJLvZEepMz96nlNB4NJ5UYIfdgXNhf/TrJD8COWQs t6jsP6RG/WrpHi5iGSvMtmBBj8wQGHddexkRnf/o5YMFJZRo4Iwc7+bgYrIyywBZnfLL7T RTk9TBfWzgJHy/y1tTtCMvVooWvFZbG5AiV3de63MxBaD0o68SASyXZzVM+MabXhjcdXFY 2vjq2vJxOzunEAAAAVAOTeOzDCnj3K5iGSvMtmBBj8wQGHAAABAA38sGpHEfSxLx5MjQci dko1pKuV1W9rOK3y19A2J2N6rSdWYb7Zyzw8Gr7kTMWX1TP5WhRGCUhNRYnjI+4wgZIZdC lfGdp8MGI3HBg9CAr702BOzRTMnW0aqsGjrbhcwhWaDgRymhBh++nGAhHxeWn4ApJ8F6kT 8HaAm3dFYXpHCaZ/xuKPXr4DFugGl8MRDU8TwioNE9kRi0Ko/kB5LTHuGhMPHGshMJeVGi PQTrt9NAzgYyJeT9RB9VZadgElMvQ9S0+fo6ipOA== ---- END SSH2 PUBLIC KEY ----

" 7ZTVd7H63VyVqBIqfmEBALVa6VKtALZkydlOiPasikEQfujH07tjW+OffaRufFDG0VQESj 5iGSvMtmBBj8wQxGlvJ/dayVqBvvHzMao8bwGC+HFUtH1un7uyIEwOqU1fNzEpghC97mIx tIxJA7ZTVd7H63VIqmzlLbp/ZCd6bcJLvZEepMz96nlNB4NJ5UYIfdgXNhf/TrJD8COWQs t6jsP6RG/WrpHi5iGSvMtmBBj8wQGHddexkRnf/o5YMFJZRo4Iwc7+bgYrIyywBZnfLL7T RTk9TBfWzgJHy/y1tTtCMvVooWvFZbG5AiV3de63MxBaD0o68SASyXZzVM+MabXhjcdXFY 2vjq2vJxOzunEAAAAVAOTeOzDCnj3K5iGSvMtmBBj8wQGHAAABAA38sGpHEfSxLx5MjQci dko1pKuV1W9rOK3y19A2J2N6rSdWYb7Zyzw8Gr7kTMWX1TP5WhRGCUhNRYnjI+4wgZIZdC lfGdp8MGI3HBg9CAr702BOzRTMnW0aqsGjrbhcwhWaDgRymhBh++nGAhHxeWn4ApJ8F6kT 8HaAm3dFYXpHCaZ/xuKPXr4DFugGl8MRDU8TwioNE9kRi0Ko/kB5LTHuGhMPHGshMJeVGi PQTrt9NAzgYyJeT9RB9VZadgElMvQ9S0+fo6ipOA== ---- END SSH2 PUBLIC KEY ----

4. 在本地主机上,创建 ~/.ssh2/identification 文件

在本地主机上创建以下文件。

$ vim ~/.ssh2/identification idKey id_dsa_2048_a

5. 在远程主机上,将 SSH2 公钥转换为 OpenSSH 公钥

这应该在运行 OpenSSH 的远程主机上执行。只有 OpenSSH 可以在 OpenSSH 和 SSH2 格式之间来回转换密钥。

[remote-host]$ ssh-keygen -i -f ~/.ssh/id_dsa_1024_a.pub > \ ~/.ssh/id_dsa_1024_a_openssh.pub

将转换后的 OpenSSH 公钥从 ~/.ssh/id_dsa_1024_a_openssh.pub 文件复制到 authorized_keys 文件,如下所示。

[remote-host]$ vi ~/.ssh/authorized_keys ssh-dss 5iGSvMtmBBj8wQdegAEBALVa6VKtALZkydlOiPasikEQfujH07tjW+OffaRufFD G0VQESjq+YlVTWcXxStz0xGlvJ/dayVqBvvHzMao8bwGC+HFUtH1un7uyIEwOqU1fNzEpgh C97s143S8zBcTAGtdegte3IqmlLbp/ZCd6bcJLvZEepMz96nlNB4NJ5UYIfdgXNhf/TrJD8 COWQst6jsP6RG/WrpHiI4QVDM6tZVZ4CnGjm1QPkRnf/o5YMFJZRo4Iwc7+bgYrIyywBZnf LL7TRTk9TBfWzgJHy/y1tTtCMvVooWvFZbG5AiV3de63MxBaD0o68SASyXZzVM+MabXhjcd XFY2vjq2vJxOzunEAAAAVAOTeOzDCnj3K5iGSvMtmBBj8wQGHAAABAA38sGpHEfSxLx5MjQ dFYXpHCaZ/xuKPXr4DFugGl8MRDU8TwioNE9kRi0Ko/kB5LTHuGhMPHGshMJeVGiPQTrt9N AzgYyJeT9RB9VZadgElMvQ9S0+fo6ipOA==

6. 设置远程主机对 .ssh 目录的适当权限

在运行 openSSH 的远程主机上,确保设置以下权限。没有这个,你会遇到各种奇怪的 ssh 问题。

$ chmod 755 ~ $ chmod 755 ~/.ssh $ chmod 644 ~/.ssh/authorized_keys

7.使用SSH密钥认证从local-host登录到remote-host

如下所示从本地主机 (SSH2) 到远程主机 (OpenSSH) 执行 ssh 以验证基于密钥的身份验证是否正常工作。

[local-host]$ [You are on local-host here] [local-host]$ ssh -l tiamo remote-host Host key not found from database. Key fingerprint: bitaz-navun-gogus-mptop-ljilk-qwlem-ftrtm-llmak-topok-zuiof-bnmix You can get a public key's fingerprint by running % ssh-keygen -F publickey.pub on the keyfile. Are you sure you want to continue connecting (yes/no)? yes Host key saved to /home/tiamo/.ssh2/hostkeys/key_22_remote-host.pub host key for remote-host, accepted by tiamo Sun Oct 19 2020 15:06:42 -0700 Passphrase for key "/home/tiamo/.ssh2/id_dsa_2048_a" with comment "2048-bit dsa, tiamo@local-host, Sun Oct 19 2020 14:49:42 -0700":[Enter password] Last login: Sun Oct 19 14:01:48 2020 from 192.168.1.10 [remote-host]$ [You are on remote-host here]

注意:如果在从本地主机到远程主机执行 ssh 或 scp 时出现以下错误,请参阅如何解决 SSH 上的算法协商失败问题以解决此问题。

[local-host]$ ssh -l tiamo remote-host warning: Authentication failed. Disconnected; key exchange or algorithm negotiation failed (Algorithm negotiation failed.)

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

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

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

8. 在本地主机上启动 SSH 代理

SSH 代理将在后台运行以保存私钥并执行 ssh 和 scp,而无需多次输入密码。

[local-host]$ ssh-agent $SHELL

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

[local-host]$ ssh-add Adding identity: /home/tiamo/.ssh2/id_dsa_2048_a.pub Need passphrase for /home/tiamo/.ssh2/id_dsa_2048_a (2048-bit dsa, tiamo@local-host, Sun Oct 19 2020 14:49:42 -0700). Enter passphrase:[Enter your passphrase here]

10.从local-host到remote-home执行SSH或SCP,无需输入密码

[local-host]$ [You are on local-host here] [local-host]$ ssh -l tiamo remote-host Last login: Sun Oct 19 14:20:48 2020 from 192.168.1.10 [remote-host]$ [You are on remote-host here]

Linux ssh

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

上一篇:Linux : 基于 SSH2 密钥的身份验证设置综合指南
下一篇:【教师节特辑】用科技填补教育的鸿沟,为乡村教师赋能
相关文章