如何在 Windows 和 Linux 中管理 SSH 配置文件如何在 Windows 和 Linux 中管理 SSH 配置文件如何在 Windows 和 Linux 中管理 SSH 配置文件如何在 Windows 和 Linux 中管理 SSH 配置文件
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Windows 和 Linux 中管理 SSH 配置文件

您的 SSH 配置文件允许您为每个 SSH 主机定义特定设置,从而更容易连接到该主机。通过在文件中定义许多这些常见或不常见的属性,无需在每次需要连接时记住此参数集。

定义 SSH 连接

如果文件 ~/.ssh/config 不存在,您可以继续创建它。通常,此文件存在于 .ssh“隐藏”目录中,隐藏只是因为大多数操作系统不显示以 . 开头的目录。此外,该目录通常位于一个人的主目录或运行 ssh 的用户的主目录中,因此 ~ 符号表示主目录。

请务必注意 .ssh 文件夹中的权限。大多数 SSH 客户端希望文件在此文件夹中的模式为 600。如果从适用于 Linux 的 Windows 子系统引用此文件夹,您应该确保 chmod 600 ~\.ssh\*

那么,这个文件中的简单 SSH 连接是什么样的呢?下面是一个简单配置的示例。

Host my-ssh-host
  HostName 10.0.0.5
  Port 22
  User myuser

从上面的配置可以看出,这是最基本的配置。事实上,您可以省略端口,因为它不是绝对必要的,因为 22 是默认的 SSH 端口。通过定义此连接,我们可以在命令行上简单地执行以下操作。

ssh my-ssh-host

连接通常会提示输入密码,因为 SSH 连接不应不受保护。

公钥/私钥

几乎所有 SSH 教程或设置指南通常都会在某一时刻引用公钥/私钥。这些是设置 SSH 连接的首选方法。而不是可以破解或猜测的密码,有必要实际获取密钥文件。本教程不会讨论如何创建它们,所以让我们假设一个集合已经存在并且设置正确。我们如何告诉我们的主机配置使用这个文件?

Host my-ssh-host
  HostName 10.0.0.5
  Port 22
  User myuser
	IdentityFile ~/.ssh/id_ed25519_myuser
	IdentitiesOnly yes

我们在这里介绍了两个新命令。 IdentityFile 和 IdentitiesOnly 命令。首先,我们需要告诉 SSH 密钥文件在哪里,在本例中我们将文件存储在 .ssh 目录中(注意权限)。其次,我们定义了一个名为 IdentitiesOnly 的标签。这将告诉 SSH 不要尝试该文件夹中的每个身份文件,而只尝试定义的文件。默认情况下,SSH 将遍历并尝试每个身份文件,直到找到正确的文件。如果有很多身份,这通常会导致目标服务器上出现“太多用户 myuser 的身份验证失败”。

复杂配置

我们可以在本文中涵盖许多场景,但让我们回顾一些常见且有用的场景。

转发代理

如果您有这样一种情况,您已经打开了到目标服务器的 SSH 连接,然后需要从该原始目标服务器建立到第二台服务器的另一个 SSH 连接,该怎么办?您可能认为您需要在该目标服务器上存储相同的 SSH 密钥才能进行下一跳。有一个名为 ForwardAgent 的命令允许您通过设置 SSH 代理密钥转发将本地密钥“转发”到跃点中的下一个服务器。

Host my-ssh-host
  HostName 10.0.0.5
  Port 22
  User myuser
	IdentityFile ~/.ssh/id_ed25519_myuser
	IdentitiesOnly yes
	ForwardAgent yes

代理跳转

与 ForwardAgent 类似,通常需要通过第一个(或第二个)目标直接打开辅助 SSH 连接。很多时候这是因为一台机器可能被防火墙从一般互联网上隔离开来,但是有一个连接到一个“跳转箱”,然后允许一个人在防火墙服务器上打开一个连接。从 SSH 版本 7.3 及更高版本开始,ProxyJump 命令使我们能够轻松完成此操作。

Host my-ssh-host
  HostName 10.0.0.5
  Port 22
  User myuser
	IdentityFile ~/.ssh/id_ed25519_myuser
	IdentitiesOnly yes
	ForwardAgent yes
	ProxyJump myuser@10.0.0.6:22,myuser2@10.0.0.7:10005

如上所示,这里有两台服务器。最初,SSH 连接将连接到 10.0.0.5,但随后立即打开连接到 10.0.0.6,然后它最终会使用不同的用户和端口打开连接<代码>10.0.0.7。

值得指出的是,您确实应该确保您的 SSH 服务器已锁定。

SSH 代理隧道

如果有搭建SOCKSv5隧道的需求怎么办?使用配置文件这样做很容易。我们在这里介绍三个新命令,DynamicForward、ControlMaster 和 ControlPath。

Host my-ssh-host
  HostName 10.0.0.5
  Port 22
  User myuser
	IdentityFile ~/.ssh/id_ed25519_myuser
	IdentitiesOnly yes
	DynamicForward 8080
  ControlMaster auto
  ControlPath ~/.ssh/%r@%h:%p

DynamicForward 命令是我们实际希望通过 SSH 连接代理的端口,例如端口 8080。 ControlMaster 设置为 auto,这意味着如果连接存在,则使用它,但如果不存在则创建一个新连接。最后,ControlPath 设置实际套接字文件的位置。在这种情况下,它使用 %r@%h:%p 的命名格式,在这种连接情况下对应于 myuser@10.0.0.5:22。

结论

SSH 配置文件中有很多功能。除了在一个位置内轻松定义许多不同的主机之外,还可以定义更复杂的示例。通过这样做,不仅主机连接得到了很好的记录,而且还允许在命令行上快速轻松地访问。如果您选择将此文件置于版本控制之下,您就可以添加拥有主机运行历史记录的功能,并有可能在将来避免让您自己头疼。如您所知,SSH 配置文件使定义 SSH 主机变得容易!

©2015-2025 艾丽卡 support@alaica.com