SSH 代理转发 如何正确使用 SSH 以及什么是 SSH 代理转发

2025-06-07

SSH 代理转发如何正确使用 SSH 以及什么是 SSH 代理转发

SSH(安全外壳)广泛用于提供对远程系统的安全访问,我们实现它的方法很少。基本上,每个使用它的人都知道常规的密码访问。但是,这种方法存在一些问题,主要是它允许暴力破解密码。

SSH 提供了更完善的身份验证流程。我们将回顾 SSH 的基本使用方法,并了解一些高级选项,以便能够在外部服务器中使用 SSH 密钥,而无需直接将密钥放在外部服务器上。

第一种方法是在本地机器和远程机器之间使用私钥/公钥。

使用 SSH 公钥访问

我们知道,如果我们尝试使用基本 SSH 连接到服务器,它会提示我们输入密码。为了避免服务器每次连接时都提示输入密码,我们创建了一对公钥和私钥。

  1. 启动密钥生成程序
$ ssh-keygen -o -a 100 -t ed25519
Enter fullscreen mode Exit fullscreen mode
  1. 输入保存密钥的文件的路径。
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key(/home/johndoe/.ssh/id_rsa): 
Enter fullscreen mode Exit fullscreen mode

您应该输入保存密钥的文件的路径,默认情况下位于id_rsa您的.ssh目录中。

这将创建两个文件:一个私钥和一个公钥。公钥将附加.pub在其名称后面。

  1. 输入使用密钥的密码。

这是用于加密密钥的密码。后续连接时需要输入此密码。您可以将其留空,但强烈建议不要这样做

Enter passphrase(empty for no passphrase):  <Type the passphrase>
Enter fullscreen mode Exit fullscreen mode
  1. 重新输入您的密码
Enter same passphrase again: <Type the passphrase>
Your identification has been saved in /home/johndoe/.ssh/id_rsa.
Your public key has been saved in /home/johndoe/.ssh/id_rsa.pub.
The key fingerprint is:
0e:fb:3d:57:71:73:bf:58:b8:eb:f3:a3:aa:df:e0:d1 johndoe@myLocalHost
Enter fullscreen mode Exit fullscreen mode
  1. 验证结果

您选择的目录中应该包含这两个密钥。如果一切顺利,我们就可以使用我们的密钥了。

  1. 复制远程主机上的公钥。

我们需要在远程主机上添加我们的公钥id_rsa,路径是$HOME/.ssh/authorized_keys

  1. 使用我们的密钥通过 SSH 连接
ssh -i ~/.ssh/id_rsa user@our_host_ip
Enter fullscreen mode Exit fullscreen mode

SSH代理

我们已经知道如何使用密钥通过安全外壳进行连接,但是,存在一个问题,它需要在每次连接时使用秘密密码解锁私钥。

为了避免这种情况,我们需要使用ssh-agent,一个在后台运行并将您的密钥存储在内存中的程序。

  1. 启用 ssh-agent
# start the ssh-agent in the background
$ eval "$(ssh-agent -s)"
Agent pid 69599
Enter fullscreen mode Exit fullscreen mode
  1. 将 SSH 密钥添加到 ssh-agent
$ ssh-add ~/.ssh/id_rsa
Enter fullscreen mode Exit fullscreen mode

如果您的密钥名称不同,则需要id_rsa用您的密钥名称替换。

现在您可以连接到主机了,它只会要求输入一次密码。下次连接时将无需输入密码。

ssh -i ~/.ssh/id_rsa user@our_host_ip
Enter fullscreen mode Exit fullscreen mode

默认情况下,ssh 使用 id_rsa 密钥,因此我们可以避免-i ~/.ssh/id_rsa这种情况,我们可以使用

ssh user@our_host_ip
Enter fullscreen mode Exit fullscreen mode

SSH 代理转发

以前的方法看起来是完美的解决方案,但如果我们想要连接到任何需要 ssh 身份验证的服务会发生什么情况。

假设我们需要使用我们的 GitHub 密钥在远程主机上拉取一个仓库。我们需要在主机上重复上述过程。如果有人授予我们主机的访问权限,这将非常危险,因为他可以获取我们的私钥并访问私有配置的服务。

为了避免上述情况,我们将使用我们的最终资源:SSH 代理转发。

SSH 代理转发功能可简化服务器部署。它允许您使用本地 SSH 密钥,而无需将密钥(无需密码!)留在服务器上。

让我们配置并测试 SSH 转发,使用 github 作为远程服务将我们的代码拉入主机。

设置 SSH 代理转发

请记住,我们需要已经将我们的密钥与任何 GitHub 存储库关联起来。

那么,让我们配置一下:

  1. 创建或打开文件~/.ssh/config
  2. 输入以下文本,将 myhost.com 替换为我们的服务器域名或 IP
Host myhost.com
  ForwardAgent yes
Enter fullscreen mode Exit fullscreen mode

有一个快捷方式可以存档它,如果我们不想创建配置文件,我们还有另一个选择,使用-A带有命令的标志ssh

ssh -A user@myhost.com 
Enter fullscreen mode Exit fullscreen mode

-A 选项启用身份验证代理连接的转发。

这意味着,它会将您的 SSH 身份验证模式转发到远程主机。这样您就可以像在本地计算机上一样在那里使用 SSH。

测试 SSH 代理转发

为了测试我们的代理转发是否正常工作,让我们通过 ssh 进入我们的远程主机并进行测试。

$ ssh app@myhost.com
app@debian:~$ ssh -T git@github.com
Hi levivm! You've successfully authenticated, but GitHub does not provide shell access.
Enter fullscreen mode Exit fullscreen mode

成功了。现在我们可以对任何有权限访问的 GitHub 仓库进行拉取/推送了。

如果有什么问题,请告诉我。

注意:您转发的不是密钥本身,而是代理,所以基本上您可以根据需要添加多个密钥。以防您的 GitHub 仓库使用不同的密钥。

您可以在此处查看如何操作
https://superuser.com/questions/1140830/ssh-agent-forwarding-using-different-usernames-and-different-keys

如果您喜欢我的内容或者觉得有帮助,您可以给我买杯咖啡来激励我写更多内容

文章来源:https://dev.to/levivm/how-to-use-ssh-and-ssh-agent-forwarding-more-secure-ssh-2c32
PREV
如何轻松创建精美的 SVG 动画
NEXT
一分钟内将本地服务器暴露到互联网上