SSH (
SSH客户端 )是用于远程访问机器的程序,它使用户能够
在远程主机上执行命令 。它是最推荐的登录到远程主机的方法之一,因为它被设计为通过不安全的网络在两个不受信任的主机之间提供安全的加密通信。
SSH使用系统范围以及用户特定(自定义)配置文件。在本教程中,我们将解释如何创建自定义ssh配置文件,并使用某些选项连接到远程主机。
要求:
- 您必须在Linux桌面上安装OpenSSH客户端 。
- 了解用于通过ssh的远程连接的常用选项。
SSH客户端配置文件
以下是ssh客户端配置文件的位置:
/etc/ssh/ssh_config
- 这是默认的系统级配置文件。它包含适用于ssh客户端计算机的所有用户的设置。
~/.ssh/config
或$HOME/.ssh/config
- 是用户特定/自定义配置文件。它具有适用于特定用户的配置。因此,它覆盖系统范围配置文件中的默认设置。这是我们将创建和使用的文件。
默认情况下,用户使用密码在ssh中进行身份验证,但是,您可以
通过 5个简单的步骤
使用ssh keygen设置
ssh无密码登录 。
注意 :如果目录
~/.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
从上面的格式:
- 主机host1 - 是host1的头定义,这是主机规范开始的地方,它以下一个头定义结束, Host host2创建一个节。
- host1 , host2只是在命令行上使用的主机别名,它们不是远程主机的实际主机名。
- 配置选项(如ssh_option1 = value1 , ssh_option2 = value1 value2)适用于匹配的主机,并且应缩排以便组织格式化。
- 对于诸如ssh_option2 = value1 value2的选项,值value1被视为第一个,然后被视为value2 。
- 标题定义Host * (其中
*
是匹配零个或多个字符的模式通配符)将匹配零个或多个主机。
仍然考虑上面的格式,这是ssh如何读配置文件。如果您执行ssh命令远程访问
host1,像这样:
$ ssh host1
以上ssh命令将执行以下操作:
- 匹配配置文件中的主机别名host1 ,并应用定义标题Host host1下设置的选项。
- 然后移动到下一个主机部分Host host2 ,并发现命令行上提供的名称不匹配,因此此处不使用任何选项。
- 它继续到最后一个部分, 主机* ,它匹配所有主机。这里,它将此部分中的所有选项应用于主机连接。但它不能覆盖前面部分中已经使用的任何选项值。
- 这同样适用于host2 。
如何使用特定于用户的SSH配置文件
一旦你理解了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 youcl
IdentityFile ~/.ssh/id_rsa
Protocol 2
Compression yes
ServerAliveInterval 60
ServerAliveCountMax 20
LogLevel INFO
以上ssh配置选项的详细说明。
- HostName - 定义要登录的真实主机名,或者,您可以使用数字IP地址,也允许(在命令行和HostName规范中)。
- 用户 - 指定要登录的用户。
- 端口 - 设置在远程主机上连接的端口号,默认值为22 。使用在远程主机的sshd配置文件中配置的端口号。
- 协议 - 此选项定义ssh应按照优先级顺序支持的协议版本。 通常的值为“1”和“2” ,多个版本必须以逗号分隔。
- IdentityFile - 指定从其读取用户的DSA,Ed25519,RSA或ECDSA身份验证身份的文件。
- ForwardX11 - 定义X11连接是否将通过安全通道和DISPLAY集自动重定向。 它有两个可能的值“yes”或“no” 。
- 压缩 - 用于在远程连接期间使用“yes”值设置压缩。 默认值为“no” 。
- ServerAliveInterval - 设置超时间隔(以秒为单位),如果没有从服务器接收到响应(或数据),ssh将通过加密通道发送一条消息,以请求服务器的响应。 默认值为0 ,表示不会向服务器发送消息,如果已定义BatchMode选项,则为300 。
- ServerAliveCountMax - 设置可以在没有ssh从服务器接收任何响应的情况下发送的服务器活动消息的数量。
- LogLevel - 定义记录来自ssh的消息时使用的详细程度级别。允许的值包括:QUIET,FATAL,ERROR,INFO,VERBOSE,DEBUG,DEBUG1,DEBUG2和DEBUG3。默认值为INFO。
连接到任何远程Linux主机(在我的情况下,CentOS 7)的标准方式,在上面的配置文件的第二部分中定义,我们通常键入以下命令:
$ ssh -i ~/.ssh/id_rsa -p 22 youcl@192.168.56.10
但是,使用ssh客户端配置文件,我们可以简单地键入以下命令:
$ ssh centos7
您可以在ssh客户端配置手册页中找到更多选项和用法示例:
$man ssh_config
现在,在本指南中,我们解释了如何在Linux中使用特定于用户的(自定义)ssh客户端配置文件。使用下面的反馈表单回写我们关于这篇文章。