TranslateProject/translated/tech/20170202 How to Configure Custom SSH Connections to Simplify Remote Access.md

173 lines
7.6 KiB
Markdown
Raw Normal View History

如何配合自定义的 SSH 来简化远程访问
===================
SSH (SSH 客户端) 是一个用于访问远程主机的程序,它使得用户能够 [在远程主机上执行命令][2]。这是在登录远程主机中的最受推崇的方法之一,因为其设计目的就是为两台不可信任主机通过不安全网络环境的通信提供安全加密。
SSH 使用系统全局以及用户指定 (用户自定义) 的配置文件。在本文中,我们将介绍如何创建一个自定义的 ssh 配置文件,并且通过确切的选项来链接到远程主机。
#### 先决条件:
1. 你必须 [在你的桌面 Linux 上安装好 OpenSSH 客户端][1]。
2. 理解通过 ssh 进行远程连接的常用选项
#### SSH 客户端配置文件
以下为 ssh 客户端配置文件:
1. `/etc/ssh/ssh_config` 为默认的配置文件,属于系统全局配置文件,包含应用到所有用户的 ssh 客户端的设置。
2. `~/.ssh/config` 或者 `$HOME/.ssh/config` 为用户指定/自定义配置文件,这个文件中的配置只对至指定的用户有效,因此,它是会覆盖掉默认的系统全局配置文件中的设置的。这也是我们要创建和使用的文件。
默认情况下,用户是是通过在 ssh 中输入密码来获取验证的,你可以以一个简单的步骤来 [使用 Keygen 来设置 ssh 无密码登录][3]。
注:如果你的系统上不存在 `~/.ssh`,那就手动创建它,并设置如下权限:
```
$ mkdir -p ~/.ssh
$ chmod 0700 ~/.ssh
```
以上的 chmod 命令表明,只有目录属主对该目录有读取、写入和执行权限,这也是 ssh 所要求的设置。
### 如何创建用户指定的 SSH 配置文件
该文件并不会被默认创建的,所以你需要使用具有读取/写入权限的用来来创建它。
```
$ touch ~/.ssh/config
$ chmod 0700 ~/.ssh/config
```
上述文件包含由特定主机定义的各个部分,并且每个部分只应用到主机定义中相匹配的部分。
`~/.ssh/config` 文件的常见格式如下,其中所有的空行和以 `#` 开头的行为注释:
```
Host host1
ssh_option1=value1
ssh_option2=value1 value2
ssh_option3=value1
Host host2
ssh_option1=value1
ssh_option2=value1 value2
Host *
ssh_option1=value1
ssh_option2=value1 value2
```
如上格式详解:
1. Host host1 为关于 host1 定义的头部,主机定义就从此处开始,直到下一个定义头部 Host host2 出现,这样形成一个完整的定义。
2. host1 和 host2 是再命令行中使用的主机别名,并非实际的远程主机名。
3. 其中,如 ssh_option1=value1、ssh_option2=value1 value2 等配置选项将应用到相匹配和想要以一定格式组织的主机。
4. 对于 ssh_option2=value1 value2 这样的选项ssh 执行时会按照顺序优先使用 value1 的值。
5. Host * (其中 `*` 为匹配模式/通配符,匹配零个或多个字符) 定义头部会匹配零个或者多个主机。
仍旧以上述的格式为例ssh 也是也这样的形式类读取配置文件的。如果你执行 shh 命令来访问远程主机 host1如下
```
$ ssh host1
```
以上 ssh 命令会进行一下动作:
1. 匹配配置文件中主机别名 host1并使用定义头部中的各个设置项。
2. 继续匹配下一个 host 定义,通过查找命令行中的名称发现不匹配,所有接下来的各个设置项会被略过。
3. 最后执行到最后一个 host 定义,这会匹配所有的主机。这里,会将接下来的所有设置选项应用到所有的主机连接中。但是它不会覆写之前已经有 host 定义的那些选项。
4. ssh host2 与此类似。
### 如何使用用户指定的 shh 配置文件
在你理解了 ssh 客户端配置文件的工作方式之后,你可以通过如下方式来创建它。记得使用你的服务器环境中对应的选项、值 (主机别名、端口号、用户名等)。
通过你最喜欢的编辑器来打开配置文件:
```
$ vi ~/.ssh/config
```
并定于必要的部分:
```
Host fedora25
HostName 192.168.56.15
Port 22
ForwardX11 no
Host centos7
HostName 192.168.56.10
Port 22
ForwardX11 no
Host ubuntu
HostName 192.168.56.5
Port 2222
ForwardX11 yes
Host *
User tecmint
IdentityFile ~/.ssh/id_rsa
Protocol 2
Compression yes
ServerAliveInterval 60
ServerAliveCountMax 20
LogLevel INFO
```
以上 ssh 配置文件的详细解释:
1. HostName - 定义真正要登录的主机名,此外,你也可以使用数字 IP 地址,不管是在命令行或是 HostName 定义中都运行使用其中任一种。
2. User  指定以哪一个用户来登录。
3. Port  设置连接远程主机的端口,默认是 22 端口。但必须是远程主机的 sshd 配置文件中定义的端口号。
4. Protocol  这个选项定义了优先使用 ssh 支持的协议版本。常用的值为 1  2同时使用两个协议版本则必须使用都厚隔开。
5. IdentityFile  指定读取用户 DSA、Ed25519、ECDSA 等授权验证信息的文件。
6. ForwardX11  定义 X11 链接是否自动重定向到安全通道和 DISPLAY 设置。这两个可以设置的值,即 “yes”  “no”。
7. Compression  默认值为 “no”如果设置为 “yes”则在连接远程主机过程中使用压缩进程传输。
8. ServerAliveInterval  设置当不在收到服务器响应 (或者数据) 时的过期时间单位为秒ssh 会通过加密信道向发送信息,请求服务器响应。默认值为 0这意味着 ssh 不会向服务器发送响应请求,如果 Batch 选项有定义,则默认是 300s。
9. ServerAliveCountMax  设置服务器活动信息的数值,以便在 ssh 在没有收到服务器响应的情况下发送信息。
10. LogLevel  定义 ssh 登录信息的的日志冗余级别。允许的值为QUIET、 FATAL、ERROR、INFO、VERBOSE、DEBUG、DEBUG1、DEBUG2 和 DEBUG3默认为 INFO。
以上,连接任意远程主机的标准方法, 我连接的是 CentOS 7即定义的第二部分我们可以简单的输入如下命令
```
$ ssh -i ~/.ssh/id_rsa -p 22 tecmint@192.168.56.10
```
然而,使用了 ssh 客户端配置文件之后,我们还可以这样:
```
$ ssh centos7
```
你也可以在 man 帮助页面寻找更多的设置选项和使用实例:
```
$man ssh_config
```
至此,文毕。我们在文中想你介绍了在 Linux 中如何如何使用用户指定 (自定义) 的 ssh 客户端配置文件。通过下方的反馈表单来写一些与本文的相关的想法吧。
------------------------------------------------
作者简介:
Aaron Kili 是一名 Linux 和 F.O.S.S 忠实拥护者、高级 Linux 系统管理员、Web 开发者,目前在 TecMint 是一名活跃的博主,热衷于计算机并有着强烈的只是分享意愿。
-------------------------------------------------
译者简介:
[GHLandy](http://GHLandy.com) —— 生活中所有欢乐与苦闷都应藏在心中,有些事儿注定无人知晓,自己也无从说起。
-------------------------------------------------
via: http://www.tecmint.com/configure-custom-ssh-connection-in-linux/
作者:[Aaron Kili][a]
译者:[GHLandy](https://github.com/GHLandy)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:http://www.tecmint.com/author/aaronkili/
[1]:http://www.tecmint.com/install-openssh-server-in-linux/
[2]:http://www.tecmint.com/execute-commands-on-multiple-linux-servers-using-pssh/
[3]:http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/