如何为您的SSH客户端配置自定义连接选项

介绍

SSH,即Secure Shell,是连接到 Linux 服务器进行远程管理的最常见方式。虽然通过命令行连接到单个服务器相对简单,但对于连接到多个远程系统,有许多工作流程优化。

OpenSSH 是大多数系统上最常用的命令行 SSH 客户端,它允许您提供自定义的连接选项。这些选项可以保存到包含不同选项的配置文件中。这有助于保持您为每个主机使用的不同连接选项分离和组织,并避免在每次需要连接时在命令行上提供广泛的选项。

在本指南中,我们将介绍 SSH 客户端配置文件的结构,并介绍一些常见选项。

先决条件

要完成本指南,您需要对 SSH 以及连接时可以提供的一些选项有一定了解。您还应该为一些用户或服务器配置基于 SSH 密钥的身份验证,至少用于测试目的。

SSH 配置文件结构和解释算法

系统上的每个用户都可以在其主目录中维护自己的 SSH 配置文件。这些文件可以包含您在命令行上使用的任何选项,以指定连接参数。始终可以通过在 ssh 命令中添加额外的标志来覆盖配置文件中定义的值。

SSH 客户端配置文件的位置

客户端配置文件位于 ~/.ssh/config~ 是指主目录的通用快捷方式。通常,此文件不会自动创建,因此您可能需要自己创建它。如果文件不存在,touch 命令将创建它(如果存在,则更新最后修改的时间戳)。

touch ~/.ssh/config

配置文件结构

config 文件按主机组织,即按远程服务器组织。每个主机定义可以为特定匹配主机定义连接选项。通配符也支持应具有更广泛范围的选项。

每个部分以定义匹配配置选项的主机的标题开头。然后在下面定义了该匹配主机的特定配置项。只需要指定与默认值不同的项目,因为每个条目将继承未定义项目的默认值。每个部分从一个 Host 标头延伸到下一个 Host 标头。

通常,出于组织目的和可读性,为每个主机设置的选项会缩进。这不是硬性要求,但是一个有用的约定,可以让您一目了然地解释。

一般格式如下:

Host firsthost
    Hostname your-server.com
    User username-to-connect-as
    IdentityFile /path/to/non/default/keys.pem

Host secondhost
    ANOTHER_OPTION custom_value

Host *host
    ANOTHER_OPTION custom_value

Host *
    CHANGE_DEFAULT custom_value

在这里,我们有四个部分,将根据主机是否匹配在每次连接尝试中应用。

解释算法

了解 SSH 如何解释文件以应用配置值很重要。这在使用通配符和 Host * 通用主机定义时有影响。

SSH 将命令行提供的主机名与定义配置部分的每个 Host 标头进行匹配。

例如,考虑以下定义:

Host devel
    HostName devel.example.com
    User tom

此主机允许我们通过在命令行上键入以下内容连接为 tom@devel.example.com

ssh devel

SSH 从配置文件顶部开始,检查每个 Host 定义,看它是否与命令行中给定的值匹配。找到第一个匹配的 Host 定义后,将应用与即将到来的连接相关联的每个关联的 SSH 选项。

然后,SSH 向下移动文件,检查其他 Host 定义是否也匹配。如果找到另一个匹配当前命令行中给定主机名的定义,它将考虑新部分的关联 SSH 选项。然后将应用任何先前部分未定义的新部分定义的 SSH 选项。

这是一个重要的观点。SSH 将按顺序解释与命令行中给定主机名匹配的每个 Host 部分。在此过程中,它将始终使用每个选项的第一个给定值。无法覆盖先前匹配部分给出的值。

这意味着您的 config 文件应遵循在顶部具有最具体配置的规则。更一般的定义应该稍后出现,以应用先前匹配部分未定义的选项。

让我们再次看一下上一节中的示例:

Host firsthost
    Hostname your-server.com
    User username-to-connect-as
    IdentityFile /path/to/non/default/keys.pem

Host secondhost
    ANOTHER_OPTION custom_value

Host *host
    ANOTHER_OPTION custom_value

Host *
    CHANGE_DEFAULT custom_value

在这里,我们可以看到前两个部分由文字主机名(或别名)定义,这意味着它们不使用任何通配符。如果我们使用 ssh firsthost 进行连接,将首先应用第一部分。这将为此连接设置 HostnameUserIdentityFile

它将检查第二部分,发现它不匹配,然后继续。然后找到第三部分并发现它匹配。它将检查 ANOTHER_OPTION,看它是否已经有了来自先前部分的值。发现它没有,它将应用此部分的值。然后将匹配最后一部分,因为 Host * 定义匹配每个连接。由于它没有来自其他部分的虚拟 CHANGE_DEFAULT 选项的值,它将采用此部分的值。然后使用从此过程中收集的选项进行连接。

让我们再试一次,假装从命令行调用 ssh secondhost

同样,它将从第一部分开始,并检查是否匹配。由于这只匹配到 firsthost 的连接,因此将跳过此部分。然后移动到第二部分。在发现此部分匹配请求后,将收集此连接的 ANOTHER_OPTION 值。

然后,SSH 查看第三个定义,并发现通配符匹配当前连接。然后检查是否已经有了 ANOTHER_OPTION 的值。由于此选项在已匹配的第二部分中定义,因此第三部分的值被丢弃并且没有效果。

SSH 然后检查第四部分,并应用尚未由先前匹配部分定义的选项。然后尝试使用收集到的值进行连接。

连接选项

现在你已经了解了如何编写配置文件,让我们讨论一些常见选项以及在命令行中指定它们的格式。

我们首先要讨论的是连接到远程主机所需的最小设置。即,SSH 服务器运行的主机名、用户名和端口。

要从命令行连接到一个名为 example.com 的主机,该主机的 SSH 守护程序运行在端口 4567 上,用户名为 apollo,你可以这样运行 ssh

ssh -p 4567 apollo@example.com

但是,你也可以使用完整的选项名称和 -o 标志,就像这样:

ssh -o "User=apollo" -o "Port=4567" -o "HostName=example.com"

你可以在 SSH 手册页中找到所有可用选项的完整列表。

要在你的 config 文件中设置这些选项,你必须选择一个 Host 标头名称,比如 home

Host home
    HostName example.com
    User apollo
    Port 4567

常见 SSH 配置选项

到目前为止,我们已经讨论了一些建立连接所需的选项。我们已经涵盖了这些选项:

  • HostName:用于建立连接的实际主机名。这将替换 Host 标头中定义的任何别名。如果 Host 定义指定了实际的有效地址以连接到,则此选项是不必要的。
  • User:用于连接的用户名。
  • Port:远程 SSH 守护程序运行的端口。如果远程 SSH 实例未运行在默认端口 22 上,则此选项是必要的。

还有许多其他有用的选项值得探索。我们将根据功能将一些常见选项进行讨论。

一般调整和连接项目

  • ServerAliveInterval:此选项可配置 SSH 何时发送数据包以测试服务器的响应。如果你的连接不稳定,并且想知道它是否仍然可用,这可能会很有用。

  • LogLevel:配置 SSH 在客户端记录详细程度。这可用于在某些情况下关闭日志记录或在调试时增加详细程度。从最不详细到最详细,级别为 QUIET、FATAL、ERROR、INFO、VERBOSE、DEBUG1、DEBUG2 和 DEBUG3。

  • StrictHostKeyChecking:此选项配置 SSH 是否会自动将主机添加到 ~/.ssh/known_hosts 文件。默认情况下,此选项将设置为 “ask”,这意味着如果从远程服务器接收到的主机密钥与 known_hosts 文件中找到的密钥不匹配,它将向你发出警告。如果你经常连接大量的临时主机(例如测试服务器),你可能希望将其设置为 “no”。SSH 将自动将任何主机添加到该文件中。如果你的已知主机地址在不应该更改的情况下发生更改,这可能会带来安全隐患,因此在启用之前请仔细考虑。

  • UserKnownHostsFile:此选项指定 SSH 将存储已连接到的主机信息的位置。通常情况下,你不必担心此设置,但如果你已关闭了严格的主机检查,你可能希望将其设置为 /dev/null 以便丢弃这些信息。

  • VisualHostKey:此选项可告诉 SSH 在连接时显示远程主机密钥的 ASCII 表示。打开此选项可以帮助你熟悉主机密钥,以便在将来必须从不同计算机连接时能够识别它。

  • Compression:打开压缩对于非常慢的连接可能会有所帮助。大多数用户不需要此选项。

有了上述配置项目,我们可以进行许多有用的配置调整。

例如,如果我们在云提供商快速创建和销毁主机,可能会有用的是这样的配置:

Host home
    VisualHostKey yes

Host cloud*
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
    LogLevel QUIET

Host *
    StrictHostKeyChecking ask
    UserKnownHostsFile ~/.ssh/known_hosts
    LogLevel INFO
    ServerAliveInterval 120

这将为你的 home 连接打开可视化主机密钥,让你熟悉它,以便在它发生变化或从不同的计算机连接时能够识别它。我们还设置了任何以 cloud* 开头的主机不检查主机并且不记录失败。对于其他主机,我们有合理的回退值。

连接转发

SSH 的一个常见用途是转发连接,允许本地连接通过远程主机进行隧道传输,或者允许远程机器通过本地机器进行隧道传输。当你需要通过一个单独的指定“网关”服务器连接到防火墙后面的远程机器时,这有时是必要的。SSH 还可以使用像 SOCKS5 这样的协议进行动态转发。

控制此行为的选项包括:

  • LocalForward:此选项用于指定将本地端口的流量转发到远程机器,将其隧道传输到远程网络。第一个参数应该是你希望将流量定向到的本地端口,第二个参数应该是你希望在远程端点上将该流量定向到的地址和端口。

  • RemoteForward:此选项用于定义可以将流量定向到以便从本地机器进行隧道传输的远程端口。第一个参数应该是远程系统上流量将被定向到的远程端口。第二个参数应该是当它到达本地系统时要将流量指向的地址和端口。

  • DynamicForward:这用于配置可以与像 SOCKS5 这样的动态转发协议一起使用的本地端口。使用动态转发协议的流量可以在本地机器上定向到此端口,在远程端点上,它将根据包含的值进行路由。

这些选项可以用于双向转发端口,如下所示:

这将允许我们在本地机器上使用端口8080

以便从远程机器访问 example.com 的80端口

Host local_to_remote
LocalForward 8080 example.com:80

这将允许我们通过另一侧的7777端口

向远程机器提供对 internal.com 的443端口的访问

Host remote_to_local
RemoteForward 7777 internal.com:443

当您需要打开浏览器窗口访问在不直接通过 SSH 访问的服务器上运行的私有仪表板或其他 Web 应用程序时,这将非常有用。


### 其他转发

除了连接转发,SSH 还允许其他类型的转发。

您可以转发存储在本地机器上代理中的任何 SSH 密钥,从而允许我们使用存储在本地系统上的凭据连接到远程系统。您还可以在远程系统上启动应用程序,并使用 X11 转发将图形显示到本地系统。X11 是 Linux 显示服务器,如果您同时使用远程和本地 Linux 环境,它可能不太直观,但非常有用。

以下是与这些功能相关联的指令:

* **`ForwardAgent`**:此选项允许将存储在本地机器上的身份验证密钥转发到您要连接的系统。这可以让您使用您的家庭密钥从主机到主机跳转。

* **`ForwardX11`**:如果您希望能够转发在远程系统上运行的应用程序的图形屏幕,可以打开此选项。

### 指定密钥

如果为您的主机配置了 SSH 密钥,这些选项可以帮助您管理每个主机使用的密钥。

* **`IdentityFile`**:此选项可用于指定每个主机使用的密钥的位置。SSH 默认将使用位于 `~/.ssh` 中的密钥,但如果您为每个服务器分配了密钥,则可以使用此选项指定它们的确切路径。

* **`IdentitiesOnly`**:此选项可用于强制 SSH 仅依赖于 `config` 文件中提供的标识。如果 SSH 代理在内存中具有不适用于所讨论的主机的备用密钥,则可能需要使用此选项。

如果您必须跟踪不同主机的大量密钥并使用一个或多个 SSH 代理来协助,这些选项尤其有用。


## 结论

只要您牢记 SSH 将如何解释这些值,您就可以建立具有合理回退的特定值的丰富集合。

如果您必须在非常差或间歇性的连接(例如飞机上的 Wi-Fi)上使用 SSH,您还可以尝试使用 mosh,它旨在使 SSH 在不利情况下工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/552969.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

web 学习第六次课程

文章目录 定位 定位 <body><div style"height:100px;width:100px;border:#F00 1px solid;"></div><div style"height:100px;width:100px;border: #00F 1px solid;"></div> </body><body><div style"pos…

Go 语言中的 GIF 图像处理完全指南:`image/gif`的技术与实践

Go 语言中的 GIF 图像处理完全指南&#xff1a;image/gif的技术与实践 概述安装与基础设置导入 image/gif 包初步配置示例&#xff1a;设置一个简单的 GIF 编码环境 读取与解码 GIF 图像读取 GIF 文件解析 GIF 数据 创建与编码 GIF 图像创建 GIF 图像编码 GIF 图像 处理 GIF 动…

【深度学习】wandb模型训练可视化工具使用方法

【深度学习】wandb模型训练可视化工具使用方法 wandb简介功能介绍登陆注册以及API keysproject和runsproject和runs的关系 wandb的配置实验跟踪版本管理Case可视化分析可视化自动调参&#xff08;wandb.sweep&#xff09;配置wandb.sweep1.配置 sweep_config2.初始化 sweep con…

学习STM32第十五天

SPI外设 一、简介 STM32F4XX内部集成硬件SPI收发电路&#xff0c;可以由硬件自动执行时钟生成、数据收发等功能&#xff0c;减轻CPU负担&#xff0c;可配置8位/16位数据帧&#xff0c;高位&#xff08;最常用&#xff09;/低位先行&#xff0c;三组SPI接口&#xff0c;支持DMA…

网站怎么实现HTTPS访问?

网站实现HTTPS的过程主要分为以下几个步骤&#xff1a; 1. 申请SSL证书&#xff1a; - 根据网站需求选择合适的SSL证书类型&#xff0c;DV证书只需验证域名所有权&#xff0c;适用于个人网站或小型项目&#xff1b;OV和EV证书需验证企业身份信息&#xff0c;适用于对信任度要求…

使用GAN做图像超分——SRGAN,ESRGAN

在GAN出现之前&#xff0c;使用的更多是MSE&#xff0c;PSNR,SSIM来衡量图像相似度&#xff0c;同时也使用他们作为损失函数。 但是这些引以为傲的指标&#xff0c;有时候也不是那么靠谱&#xff1a; MSE对于大的误差更敏感&#xff0c;所以结果就是会倾向于收敛到期望附近&am…

spring05:代理模式 和 AOP

spring05&#xff1a;代理模式 和 AOP 文章目录 spring05&#xff1a;代理模式 和 AOP前言一、静态代理模式&#xff08;代理类直接写好&#xff09;1. &#xff08;房东租房子 的案例&#xff09; 二、动态代理模式&#xff08;代理类是动态生成的&#xff09;1. &#xff08;…

动态代理,XML,Dom4j

文章目录 动态代理概述特点代码实现实现的关键步骤优点 XML概述作用编写第一个XML文件组成声明元素(标签、标记)属性注释转义字符[实体字符字符区(了解) 约束DTD约束Schema约束名称空间 Dom4jXML解析解析方式和解析器解析方式解析器Snipaste_2024-04-17_21-22-44.png<br /&g…

竞赛 基于LSTM的天气预测 - 时间序列预测

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 机器学习大数据分析项目 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/po…

【机器学习300问】74、如何理解深度学习中L2正则化技术?

深度学习过程中&#xff0c;若模型出现了过拟合问题体现为高方差。有两种解决方法&#xff1a; 增加训练样本的数量采用正则化技术 增加训练样本的数量是一种非常可靠的方法&#xff0c;但有时候你没办法获得足够多的训练数据或者获取数据的成本很高&#xff0c;这时候正则化技…

pajamas 1 daydream.sequence-template

0. 老实交代&#xff0c;最近对于python&#xff0c;非常之感冒 热天气常驻之后&#xff0c;各种毛病就来了&#xff1a;蚊子很彪悍&#xff0c;牙齿不舒服&#xff0c;肠胃那更是一坨 … 虽然不久前&#xff0c;荷包大残&#xff0c;但是关注到 mac mini 之后&#xff0c;就…

项目7-音乐播放器5+注册账号

1.前端代码 MAPPER Insert("insert into user(username,password) values (#{username},#{password}) ")Integer insertUserInfo(String username,String password); Service public Result insertUserInfo(String username, String oldpassword,String newpasswo…

MAC电脑M1安装OpenCV

最近在学习研究OpenCV&#xff0c;奈何只有mac电脑。安装OpenCV感觉还是挺麻烦的&#xff0c;所以记录一下&#xff0c;难免以后会忘记。 安装OpenCV我参考的帖子 https://www.bilibili.com/read/cv23613225/ 一、首先安装Anaconda 目前已安装不做赘述 二、启动命令窗口 方…

SpringBoot搭建环境

创建项目向导 用idea向导建SpringBoot项目&#xff1a;菜单 > File > New > Project… 选择向导&#xff1a; 默认向导 https://start.spring.io 建议用 https://start.aliyun.com 配置项目信息 Group : 组织名 Artifact : 项目名 Version : 版本号 name : 与Artifa…

【在线OJ系统】自定义注解实现分布式ID无感自增

实现思路 首先自定义参数注解&#xff0c;然后根据AOP思想&#xff0c;找到该注解作用的切点&#xff0c;也就是mapper层对于mapper层的接口在执行前都会执行该aop操作&#xff1a;获取到对于的方法对象&#xff0c;根据方法对象获取参数列表&#xff0c;根据参数列表判断某个…

Hbase的简单学习一

一 Hbase的搭建与安装 1.1 安装 1.准备好文件&#xff0c;上传到Linux上 2.解压文件 tar zxvf hbase-2.2.7-bin.tar.gz -C ../ ../是解压到的路径 1.2 配置文件 1.配置环境变量 去etc/profile目录下 export HBASE_HOME/usr/local/soft/hbase-2.2.7 export PATH$PATH:$H…

Midjourney 实现角色一致性的新方法

AI 绘画的奇妙之处&#xff0c;实乃令人叹为观止&#xff01;就像大千世界中&#xff0c;寻不见两片完全相同的树叶一般&#xff0c;AI 绘画亦复如是。同一提示之词&#xff0c;竟能催生出千变万化的图像&#xff0c;使得AI所绘之作&#xff0c;宛如自然之物般独特&#xff0c;…

在报表控件 FastReport .NET 中使用 PageCreate 事件

FastReport Business Graphics .NET&#xff0c;是一款基于fastreport报表开发控件的商业图形库&#xff0c;借助 FastReport 商业图形库&#xff0c;您可以可视化不同的分层数据&#xff0c;构建业务图表以进行进一步分析和决策。利用数据呈现领域专家针对 .NET 7、.NET Core、…

使用Android studio,安卓手机编译安装yolov8部署ncnn,频繁出现编译错误

从编译开始就开始出现错误&#xff0c;解决步骤&#xff1a; 1.降低graddle版本&#xff0c;7.2-bin --->>> 降低为 6.1.1-all #distributionUrlhttps\://services.gradle.org/distributions/gradle-7.2-bin.zip distributionUrlhttps\://services.gradle.org/di…

【论文阅读】RS-Mamba for Large Remote Sensing Image Dense Prediction(附Code)

论文作者提出了RS-Mamba(RSM)用于高分辨率遥感图像遥感的密集预测任务。RSM设计用于模拟具有线性复杂性的遥感图像的全局特征&#xff0c;使其能够有效地处理大型VHR图像。它采用全向选择性扫描模块&#xff0c;从多个方向对图像进行全局建模&#xff0c;从多个方向捕捉大的空间…
最新文章