如何在没有密码的情况下从 SSH2 到 OpenSSH 执行 SSH 和 SCP
在我们之前的文章中,我们讨论了如何设置基于 ssh 密钥的身份验证以在以下三种情况下执行 ssh 和 scp 无需密码:
在本文中,我将解释如何在没有密码的情况下从 SSH2(本地主机)到 OpenSSH(远程主机)执行 ssh 和 scp。
1.识别本地主机和远程主机SSH版本
在此示例中,本地主机正在运行 SSH2,而远程主机正在运行 OpenSSH。
[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]$ ssh -V
OpenSSH_4.3p2, OpenSSL 0.9.8b 04 May 2006
2. 使用 ssh-keygen2 在本地主机上生成 SSH2 认证密钥对
在 SSH2 上,ssh-keygen
将是 ssh-keygen2
的软链接,如下所示。
[jiyik.com@local-host]$ ls -l /usr/local/bin/ssh-keygen
lrwxrwxrwx 1 root root 11 Jul 31 2006 /usr/local/bin/ssh-keygen -> ssh-keygen2
[jiyik.com@local-host]$ ssh-keygen
Generating 2048-bit dsa key pair
7 o.oOo..oOo.o
Key generated.
2048-bit dsa, jiyik@local-host, Sun Oct 19 2022 14:49:42 -0700
Passphrase : [Enter the password here]
Again :
Private key saved to /home/jiyik/.ssh2/id_dsa_2048_a
Public key saved to /home/jiyik/.ssh2/id_dsa_2048_a.pub
公钥和私钥存储在主目录下的 .ssh2 文件夹中。 在本例中,它位于 /home/jiyik/.ssh2 下。
我们不应与任何人共享私钥
。
默认情况下 ssh-keygen2
生成 DSA(数字签名算法)密钥对。 我们还可以生成 RSA 密钥对,如下所示。
[jiyik.com@local-host]$ ssh-keygen -t rsa
3. 将 SSH2 公钥从本地主机复制到运行 OpenSSH 的远程主机
将本地主机: /home/jiyik/.ssh2/id_dsa_2048_a.pub 文件复制到远程主机: /home/jiyik/.ssh/id_dsa_1024_a.pub 。 在远程主机上执行 vi /home/jiyik/.ssh/id_dsa_1024_b.pub
并从本地主机复制公钥的内容。
[jiyik.com@remote-host]$ vi /home/jsmith/.ssh/id_dsa_1024_a.pub
---- BEGIN SSH2 PUBLIC KEY ----
Subject: jsmith
Comment: "2048-bit dsa, jsmith@local-host Sun Oct 19 2022 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 文件
在本地主机上创建以下文件。
[jiyik.com@local-host]$ vim ~/.ssh2/identification
IdKey id_dsa_2048_a
5. 在远程主机上,将 SSH2 公钥转换为 OpenSSH 公钥
这应该在运行 OpenSSH
的远程主机上执行。 只有 OpenSSH
可以在 OpenSSH
和 SSH2 格式之间来回转换密钥。
[jiyik.com@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 文件中,如下所示。
[jiyik.com@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 的奇怪问题。
[jiyik.com@remote-host]$ chmod 755 ~
[jiyik.com@remote-host]$ chmod 755 ~/.ssh
[jiyik.com@remote-host]$ chmod 644 ~/.ssh/authorized_keys
7.使用SSH密钥认证从本地主机登录到远程主机
如下所示执行从本地主机 (SSH2) 到远程主机 (OpenSSH) 的 ssh,以验证基于密钥的身份验证是否正常工作。
[jiyik.com@local-host]$ [You are on local-host here]
[jiyik.com@local-host]$ ssh -l jiyik 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/jiyik/.ssh2/hostkeys/key_22_remote-host.pub
host key for remote-host, accepted by jsmith Sun Oct 19 2022 15:06:42 -0700
Passphrase for key "/home/jiyik/.ssh2/id_dsa_2048_a" with comment "2048-bit
dsa, jsmith@local-host, Sun Oct 19 2022 14:49:42 -0700":[Enter password]
Last login: Sun Oct 19 14:01:48 2022 from 192.168.1.10
[jiyik.com@remote-host]$ [You are on remote-host here]
注意
:如果我们在从本地主机到远程主机执行 ssh 或 scp 时遇到以下错误,请参阅如何解决 SSH 上的算法协商失败问题以解决此问题。
[jiyik.com@local-host]$ ssh -l jsmith 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,而无需多次输入密码。
[jiyik.com@local-host]$ ssh-agent $SHELL
9. 将私钥加载到本地主机上的 SSH 代理
[jiyik.com@local-host]$ ssh-add
Adding identity: /home/jiyik/.ssh2/id_dsa_2048_a.pub
Need passphrase for /home/jiyik/.ssh2/id_dsa_2048_a (2048-bit dsa,
jiyik@local-host, Sun Oct 19 2008 14:49:42 -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 jsmith remote-host
Last login: Sun Oct 19 14:20:48 2022 from 192.168.1.10
[jiyik.com@remote-host]$ [You are on remote-host here]
相关文章
如何在 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 服务器而无需输入密码。
从 openSSH 到 SSH2 的基于 SSH 密钥的身份验证设置
发布时间:2022/10/22 浏览次数:110 分类:操作系统
-
之前的文章(openSSH 到 openSSH 设置,SSH2 到 SSH2 设置)解释了如何在相同版本的 ssh 上设置基于密钥的身份验证,以在不输入密码的情况下执行 ssh 和 scp。 本文介绍如何在不同版本的 SS
基于 SSH2 密钥的身份验证设置
发布时间:2022/10/22 浏览次数:110 分类:操作系统
-
我之前解释了如何在不输入密码的情况下在 openSSH 上执行 SSH 和 SCP。 在本文中,我将解释如何使用以下 10 个步骤在 SSH2 上设置基于密钥的身份验证并在不输入密码的情况下执行 SSH/SCP。
在 openSSH 上无需输入密码即可执行 SSH 和 SCP
发布时间:2022/10/22 浏览次数:72 分类:操作系统
-
基于 SSH 密钥的身份验证有两个安全级别。为了让我们登录,我们需要私钥和密码。即使其中一个被入侵,攻击者仍然无法登录我们的帐户,因为需要它们两个才能登录。这比典型的基于
生成安全 SSH 密钥
发布时间:2022/07/07 浏览次数:236 分类:学无止境
-
作为软件开发人员,我们可能需要经常使用 SSH 密钥。 进行系统管理或将提交推送到 GitHub 或 GitLab 等源代码控制被认为是通过 SSH 使用公钥身份验证而不是密码的最佳实践。
如何通过 SSH 连接到 Docker 容器
发布时间:2022/02/28 浏览次数:536 分类:学无止境
-
SSH 是系统管理员工具箱中最常用的命令之一,但它在 Docker 中并不常用。 有时候我们也会需要使用SSH来连接Docker容器。本篇我们就介绍 Docker中的SSH。