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

举报
Tiamo_T 发表于 2021/09/24 16:20:40 2021/09/24
【摘要】 在我们之前的文章中,我们讨论了如何在以下三种情况下设置基于 ssh 密钥的身份验证以执行 ssh 和 scp 无需密码:OpenSSH 到 OpenSSHOpenSSH 到 SSH2SSH2 到 SSH2在本文中,我将解释如何在没有密码的情况下从 SSH2(本地主机)到 OpenSSH(远程主机)执行 ssh 和 scp。1. 识别本地主机和远程主机的 SSH 版本在此示例中,local-h...

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

  1. OpenSSH 到 OpenSSH
  2. OpenSSH 到 SSH2
  3. 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 并从本地主机复制公钥的内容。

[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 ----

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:

  1. 无密码:创建密钥对时,将密码留空。将此选项用于自动批处理。例如,如果您正在运行 cron 作业以在机器之间复制文件,这是合适的选项。您可以跳过此方法的后续步骤。
  2. 使用密码和 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]
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。