.ssh/config 文件的解释算法及配置原则
前言
SSH 是连接远程主机最常用的方式,尽管连接到单个主机的基本操作非常直接,但当你开始使用大量的远程系统时,这就会成为笨重和复杂的任务。
幸运的是,OpenSSH 允许您提供自定义的客户端连接选项。这些选项可以被存储到一个配置文件中,这个配置文件可以用来定义每个主机的配置。这有助于保持每个主机的连接选项更好的独立和组织,也你让你在需要连接时避免在命令行中写繁琐的选项。
在本文中,我们将介绍 SSH 客户端配置文件的基本知识,了解 SSH 如何解释配置文件,但不会介绍 SSH 具体选项的含义及使用。
SSH 文件的结构及解释算法
本地系统的每个用户都可以维护一个客户端的 SSH 配置文件,这个配置文件可以包含你在命令行中使用 ssh 时参数,也可以存储公共连接选项并在连接时自动处理。你可以在命令上中使用 ssh 来指定 flag ,以覆盖配置文件中的选项。
SSH 客户端配置文件的位置
配置文件的文件名为 config ,位于用户 home 目录下的 .ssh 文件夹下。
~/.ssh/config
通常,该文件不是默认创建的,因此你可能要自己创建它。
配置文件的结构
配置文件通过 Host 来组织,每一个 Host 定义项为匹配的主机定义连接选项。通配符可以用,为了让选项有更大的范围。
配置文件看起来是这样的:
Host firsthost
SSH_OPTIONS_1 custom_value
SSH_OPTIONS_2 custom_value
SSH_OPTIONS_3 custom_value
Host secondhost
ANOTHER_OPTION custom_value
Host *host
ANOTHER_OPTION custom_value
Host *
CHANGE_DEFAULT custom_value
解释算法
只有理解 SSH 怎么解释配置文件,你才能写出合理的配置文件。
SSH 使命令行中给出的主机名与配置文件中定义的 Host 来匹配。它从文件顶部向下执行此操作,所以顺序非常重要。
现在是指出 Host 定义中的模式不必与您要连接的实际主机匹配的好时机。 实际上,您可以使用这些定义为主机设置别名,以替代实际的主机名。
看个例子:
Host dev1
HostName dev1.example.com
User tom
现在要连接到 tom@dev1.example.com,就可以通过在命令行中输入如下命令:
ssh dev1
记住这一点,我们现在继续讨论在由上而下的过程中,SSH 怎么应用每一个配置选中。它从顶部开始,检查每一个 Host 定义是否与命令行中给出的主机匹配。在上一个例子中,就是检查 dev1 。
当找到第一个匹配的主机定义时,每个关联的SSH选项都将应用于即将到来的连接(为了方便下边的讨论,这里我们称该连接接为“连接a”)。 尽管如此,解释并没有结束。
SSH 继续在文件中向下查找,检查是否有其他匹配的 Host 定义。如果有另一个 Host 定义匹配,SSH 将考虑该 Host 定义下的配置选项。如果新的配置选项中有 连接a 咱时没有使用的选项,就把这些选项也加入 连接a 中。
总结一下,SSH 将按顺序解释与命令行上给出主机名匹配的每个 Host 定义。在这个过程中,SSH 始终使用为每个选项给出的第一个值。没有办法覆盖之前已经匹配的 Host 定义给出的值。
这样看来,写配置文件的一个简单的原则是。越细化的 Host 定义,要写在上边。通用的 Host 定义,要写在下边。
看个例子:
Host firsthost
SSH_OPTIONS_1 custom_value1
SSH_OPTIONS_2 custom_value2
SSH_OPTIONS_3 custom_value3
Host secondhost
ANOTHER_OPTION custom_value4
Host *host
ANOTHER_OPTION custom_value5
Host *
CHANGE_DEFAULT custom_value6
如果 ssh firsthost ,那么 SSH 使用的选项有 SSH_OPTIONS_1、SSH_OPTIONS_2、SSH_OPTIONS_3、ANOTHER_OPTION、CHANGE_DEFAULT ,使用的值分别为 custom_value1、custom_value2、custom_value3、custom_value5、custom_value6 。
如果 ssh secondhost,那么 SSH 使用的选项有 ANOTHER_OPTION、CHANGE_DEFAULT ,使用的值分别为 custom_value4、custom_value6 。
基本的连接选项
这部分直接用实例来解释:要将名为 apollo 的用户连接到名为 example.com,该主机在 4567 端口上运行 SSH 守护程序。
一般情况下,我们会在命令行在这么写:
ssh -p 4567 apollo@example.com
如果使用选项的全名,是这样的:
ssh -o "User=apollo" -o "Port=4567" -o "HostName=example.com"
我们可以把第二种方式中大写字母开头的选项放到配置文件中。可以通过 man ssh_config 来获取完整的可用的选项列表。
现在,用配置文件写一下上边的例子:
Host home
HostName example.com
User apollo
Port 4567
对每个选项而言,这样写也可以(以Port为例):
Port = 4567
Port=4567
配置共享的选项
继续上一部分的例子,我又两个主机,分别 home 和 work ,在两台主机上,我的用户名都是 apollo。简单,直接修改配置文件:
Host home
HostName example.com
User apollo
Port 4567
Host work
HostName company.com
User apollo
这样写没有问题,但是我们可以把 User 提出来:
Host home
HostName example.com
Port 4567
Host work
HostName company.com
Host *
User apollo
非常不错,不过新问题来了,你有一个好朋友 Mars ,有一个主机共享给你用,但他喜欢把你的名字倒着念,那么该怎么办?
Host home
HostName example.com
Port 4567
Host work
HostName company.com
Host friend-Mars
HostName abc.com
User ollopa
Host *
User apollo
随着时间流逝,朋友越来越多,他们都有主机给你用,而且都喜欢把你的名字倒着念,那该怎么办?
Host home
HostName example.com
Port 4567
Host work
HostName company.com
Host friend-Mars
HostName mars.com
Host friend-Mercury
HostName mercury.com
Host friend-Jupiter
HostName jupiter.com
Host friend-*
User ollopa
Host *
User apollo
原文为How To Configure Custom Connection Options for your SSH Client,本文在原文的基础上略有修改。
文章链接: https://www.cnblogs.com/xjshi/p/9146296.html
转载请注明住处
.ssh/config 文件的解释算法及配置原则的更多相关文章
- records.config文件参数解释
# Process Records Config File # # <RECORD-TYPE> <NAME> <TYPE> <VALUE (till end ...
- ~/.ssh/config文件的使用
Host github-A HostName github.com User git IdentityFile /Users/xxx/.ssh/id_rsa_A IdentitiesOnly yes ...
- git config文件总结及git alias配置
1. 文件位置 mac /etc/.gitconfig 系统级~/.gitconifg 用户级(覆盖系统级) windows C:\Users\$user\.gitconfig 当前项目下 .git/ ...
- 从Config文件中读取节点的配置信息
下面是web.config中与本内容有关的细节 <appSettings> <add key="servername" value="www" ...
- SSH自动登录config文件配置
title: SSH自动登录config文件配置 comments: false date: 2019-08-19 19:29:13 description: 更方便的 ssh 操作??? categ ...
- 配置ssh的config文件-为每个ssh连接创建别名
其实选来选去,还是iterm2就够用了,唯一比较麻烦的就是每次都有输入地址和用户名,其实,可以通过配置文件简写的. 可以在 ~/.ssh/config文件写上配置alias信息,以后ssh的时候根据a ...
- ssh config配置
使用ssh config文件可以简化ssh连接输入参数,直接从config读取 (1)建立config文件 config文件位置在~/.ssh/config 如果不存在,可以创建一个 (2)confi ...
- .ssh/config 常用配置
不用每次都 -i 指定密钥,且避免连接自动断开 ControlMaster auto ControlPath ~/.ssh/connection-%r@%h:%p ControlPersist 4h ...
- SSH Config 那些你所知道和不知道的事 (转)
原文地址:https://deepzz.com/post/how-to-setup-ssh-config.html SSH(Secure Shell)是什么?是一项创建在应用层和传输层基础上的安全协议 ...
随机推荐
- 分布式CAP理论
分布式CAP理论 来自wiki: 在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下 ...
- 100天搞定机器学习|day44 k均值聚类数学推导与python实现
[如何正确使用「K均值聚类」? 1.k均值聚类模型 给定样本,每个样本都是m为特征向量,模型目标是将n个样本分到k个不停的类或簇中,每个样本到其所属类的中心的距离最小,每个样本只能属于一个类.用C表示 ...
- Linux Capabilities 简介
为了执行权限检查,Linux 区分两类进程:特权进程(其有效用户标识为 0,也就是超级用户 root)和非特权进程(其有效用户标识为非零). 特权进程绕过所有内核权限检查,而非特权进程则根据进程凭证( ...
- 微信小程序 es6-promise.js封装请求 处理异步进程
下载es6-promise.js置于根目录下的libs文件夹下: 在根目录utils文件夹下新建httpsPromisify.js,即定义封装请求的方法 var Promise = require(' ...
- unity之Layer作用
1.使用layer做分层渲染 创建两个物体 添加AB两个层级 分别为两个物体设置对应的层级 为摄像机选择渲染层次(在这个例子中,取消对B层的渲染) 在游戏界面中,将不会显示B层的游戏对象
- unity_数据结构(常见数据结构及适用场景)
常见的数据结构: 1.Array: 最简单的数据结构 特点:数组存储在连续的内存上.数组的内容都是相同类型.数组可以直接通过下标访问.优点:由于是在连续内存上存储的,所以它的索引速度非常快,访问一个元 ...
- MSIL实用指南-返回结果
一个方法体执行完指令后,必须要完成调用并返回,这是要使用Ret指令.Ret指令的详细解释是从当前方法返回,并将返回值(如果存在)从被调用方的计算堆栈推送到调用方的计算堆栈上.就是说如果计算堆栈上没有变 ...
- nsq源码分析
nsq的源码比较简单,值得一读,特别是golang开发人员,下面重点介绍nsqd,看完这篇文章希望你能对消息队列的原理和实现有一定的了解. nsqd是一个守护进程,负责接收,排队,投递消息给客户端,并 ...
- crontab使用方法
一.crontab基本用法 1.1 cron服务 cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业. service crond start //启动服务 service ...
- 利用canvas绘制带干扰线的验证码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...