SSH 代理转发如何正确使用 SSH 以及什么是 SSH 代理转发
SSH(安全外壳)广泛用于提供对远程系统的安全访问,我们实现它的方法很少。基本上,每个使用它的人都知道常规的密码访问。但是,这种方法存在一些问题,主要是它允许暴力破解密码。
SSH 提供了更完善的身份验证流程。我们将回顾 SSH 的基本使用方法,并了解一些高级选项,以便能够在外部服务器中使用 SSH 密钥,而无需直接将密钥放在外部服务器上。
第一种方法是在本地机器和远程机器之间使用私钥/公钥。
使用 SSH 公钥访问
我们知道,如果我们尝试使用基本 SSH 连接到服务器,它会提示我们输入密码。为了避免服务器每次连接时都提示输入密码,我们创建了一对公钥和私钥。
- 启动密钥生成程序
$ ssh-keygen -o -a 100 -t ed25519
- 输入保存密钥的文件的路径。
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key(/home/johndoe/.ssh/id_rsa):
您应该输入保存密钥的文件的路径,默认情况下位于id_rsa
您的.ssh
目录中。
这将创建两个文件:一个私钥和一个公钥。公钥将附加.pub
在其名称后面。
- 输入使用密钥的密码。
这是用于加密密钥的密码。后续连接时需要输入此密码。您可以将其留空,但强烈建议不要这样做。
Enter passphrase(empty for no passphrase): <Type the passphrase>
- 重新输入您的密码
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
- 验证结果
您选择的目录中应该包含这两个密钥。如果一切顺利,我们就可以使用我们的密钥了。
- 复制远程主机上的公钥。
我们需要在远程主机上添加我们的公钥id_rsa
,路径是$HOME/.ssh/authorized_keys
- 使用我们的密钥通过 SSH 连接
ssh -i ~/.ssh/id_rsa user@our_host_ip
SSH代理
我们已经知道如何使用密钥通过安全外壳进行连接,但是,存在一个问题,它需要在每次连接时使用秘密密码解锁私钥。
为了避免这种情况,我们需要使用ssh-agent
,一个在后台运行并将您的密钥存储在内存中的程序。
- 启用 ssh-agent
# start the ssh-agent in the background
$ eval "$(ssh-agent -s)"
Agent pid 69599
- 将 SSH 密钥添加到 ssh-agent
$ ssh-add ~/.ssh/id_rsa
如果您的密钥名称不同,则需要id_rsa
用您的密钥名称替换。
现在您可以连接到主机了,它只会要求输入一次密码。下次连接时将无需输入密码。
ssh -i ~/.ssh/id_rsa user@our_host_ip
默认情况下,ssh 使用 id_rsa 密钥,因此我们可以避免-i ~/.ssh/id_rsa
这种情况,我们可以使用
ssh user@our_host_ip
SSH 代理转发
以前的方法看起来是完美的解决方案,但如果我们想要连接到任何需要 ssh 身份验证的服务会发生什么情况。
假设我们需要使用我们的 GitHub 密钥在远程主机上拉取一个仓库。我们需要在主机上重复上述过程。如果有人授予我们主机的访问权限,这将非常危险,因为他可以获取我们的私钥并访问私有配置的服务。
为了避免上述情况,我们将使用我们的最终资源:SSH 代理转发。
SSH 代理转发功能可简化服务器部署。它允许您使用本地 SSH 密钥,而无需将密钥(无需密码!)留在服务器上。
让我们配置并测试 SSH 转发,使用 github 作为远程服务将我们的代码拉入主机。
设置 SSH 代理转发
请记住,我们需要已经将我们的密钥与任何 GitHub 存储库关联起来。
那么,让我们配置一下:
- 创建或打开文件
~/.ssh/config
- 输入以下文本,将 myhost.com 替换为我们的服务器域名或 IP
Host myhost.com
ForwardAgent yes
有一个快捷方式可以存档它,如果我们不想创建配置文件,我们还有另一个选择,使用-A
带有命令的标志ssh
。
ssh -A user@myhost.com
-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.
成功了。现在我们可以对任何有权限访问的 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如果您喜欢我的内容或者觉得有帮助,您可以给我买杯咖啡来激励我写更多内容