如何定制 SSH 来简化远程访问

简介:

SSH (指 SSH 客户端)是一个用于访问远程主机的程序,它使得用户能够 在远程主机上执行命令。这是在登录远程主机中的最受推崇的方法之一,因为其设计目的就是在非安全网络环境上为两台非受信主机的通信提供安全加密。

SSH 使用系统全局以及用户指定(用户自定义)的配置文件。在本文中,我们将介绍如何创建一个自定义的 ssh 配置文件,并且通过特定的选项来连接到远程主机。

先决条件:

  1. 你必须 在你的桌面 Linux 上安装好 OpenSSH 客户端
  2. 了解通过 ssh 进行远程连接的常用选项。

SSH 客户端配置文件

以下为 ssh 客户端配置文件:

  1. /etc/ssh/ssh_config 为默认的配置文件,属于系统全局配置文件,包含应用到所有用户的 ssh 客户端的设置。
  2. ~/.ssh/config 或者 $HOME/.ssh/config 为用户指定/自定义配置文件,这个文件中的配置只对指定的用户有效,因此,它会覆盖掉默认的系统全局配置文件中的设置。这也是我们要创建和使用的文件。

默认情况下,用户是通过在 ssh 中输入密码来获取验证的,你可以以一个简单的步骤来 使用 Keygen 来设置 ssh 无密码登录

注:如果你的系统上不存在 ~/.ssh 目录,那就手动创建它,并设置如下权限:

 
  1. $ mkdir -p ~/.ssh
  2. $ chmod 0700 ~/.ssh

以上的 chmod 命令表明,只有目录属主对该目录有读取、写入和执行权限,这也是 ssh 所要求的设置。

如何创建用户指定的 SSH 配置文件

该文件并不会被默认创建的,所以你需要使用具有读取/写入权限的用户来创建它。

 
  1. $ touch ~/.ssh/config
  2. $ chmod 0700 ~/.ssh/config

上述文件包含由特定主机定义的各个部分,并且每个部分只应用到主机定义中相匹配的部分。

~/.ssh/config 文件的常见格式如下,其中所有的空行和以 ‘#’ 开头的行为注释:

 
  1. Host host1
  2. ssh_option1=value1
  3. ssh_option2=value1 value2
  4. ssh_option3=value1
  5. Host host2
  6. ssh_option1=value1
  7. ssh_option2=value1 value2
  8. Host *
  9. ssh_option1=value1
  10. ssh_option2=value1 value2

如上格式详解:

  1. Host host1 为关于 host1 的头部定义,主机相关的设置就从此处开始,直到下一个头部定义 Host host2 出现,这样形成一个完整的定义。
  2. host1 和 host2 是在命令行中使用的主机别名,并非实际的远程主机名。
  3. 其中,如 sshoption1=value1、sshoption2=value1 value2 等配置选项将应用到相匹配的主机,可以缩进以看起来更整齐些。
  4. 对于 ssh_option2=value1 value2 这样的选项,ssh 执行时会按照顺序优先使用 value1 的值。
  5. 头部定义 Host * (其中 * 为匹配模式/通配符,匹配零个或多个字符) 会匹配零个或者多个主机。

仍旧以上述的格式为例,ssh 也是也这样的形式类读取配置文件的。如果你执行 ssh 命令来访问远程主机 host1,如下:

 
  1. $ ssh host1

以上 ssh 命令会进行一下动作:

  1. 匹配配置文件中主机别名 host1,并使用头部定义中的各个设置项。
  2. 继续匹配下一个主机定义,然后发现命令行中提供的主机名没有匹配的了,所以接下来的各个设置项会被略过。
  3. 最后执行到最后一个主机定义 Host *, 这会匹配所有的主机。这里,会将接下来的所有设置选项应用到所有的主机连接中。但是它不会覆写之前已经有主机定义的那些选项。
  4. ssh host2 与此类似。

如何使用用户指定的 SSH 配置文件

在你理解了 ssh 客户端配置文件的工作方式之后,你可以通过如下方式来创建它。记得使用你的服务器环境中对应的选项、值 (主机别名、端口号、用户名等)。

通过你最喜欢的编辑器来打开配置文件:

 
  1. $ vi ~/.ssh/config

并定义必要的部分:

 
  1. Host fedora25
  2. HostName 192.168.56.15
  3. Port 22
  4. ForwardX11 no
  5. Host centos7
  6. HostName 192.168.56.10
  7. Port 22
  8. ForwardX11 no
  9. Host ubuntu
  10. HostName 192.168.56.5
  11. Port 2222
  12. ForwardX11 yes
  13. Host *
  14. User tecmint
  15. IdentityFile ~/.ssh/id_rsa
  16. Protocol 2
  17. Compression yes
  18. ServerAliveInterval 60
  19. ServerAliveCountMax 20
  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 不会向服务器发送响应请求;如果定义了 BatchMode 选项,则默认是 300 秒。
  9. ServerAliveCountMax – 设置服务器在没有接收到服务器的任何响应时,由服务器发送的活动信息数量。
  10. LogLevel – 定义 ssh 登录信息的的日志冗余级别。允许的值为:QUIETFATALERRORINFOVERBOSEDEBUGDEBUG1DEBUG2 和 DEBUG3,默认为 INFO

连接任意远程主机的标准方法是在上述两个文件中定义第二个部分(我连接的是 CentOS 7)。一般情况下,我们这样输入命令:

 
  1. $ ssh -i ~/.ssh/id_rsa -p 22 tecmint@192.168.56.10

然而,使用了 ssh 客户端配置文件之后,我们还可以这样:

 
  1. $ ssh centos7

你也可以在 man 帮助页面寻找更多的设置选项和使用实例:

 
  1. $man ssh_config



原文发布时间为:2017-03-15

本文来自云栖社区合作伙伴“Linux中国”

相关文章
|
5天前
|
安全 Linux 网络安全
SSH 简介:安全远程访问的利器
SSH是加密网络协议,用于安全远程登录和数据传输。它基于公钥和私钥验证,加密传输确保通信安全。默认使用22端口。在Linux和macOS系统上预装,Windows需额外安装。基本用法包括远程登录(ssh username@hostname)、文件传输(scp source destination)和端口转发。推荐使用密钥对认证,限制登录尝试次数,并配置SSH代理以增强安全性。了解这些基础和技巧能提升远程服务器管理和文件传输效率。
15 3
SSH 简介:安全远程访问的利器
|
5天前
|
机器学习/深度学习 Linux 网络安全
ssh远程访问windows系统下的jupyterlab
ssh远程访问windows系统下的jupyterlab
18 3
|
5天前
|
存储 安全 网络安全
Git 安全远程访问:SSH 密钥对生成、添加和连接步骤解析
SSH(Secure Shell)是一种用于安全远程访问的协议,它提供了加密通信和身份验证机制。在使用 SSH 连接到远程 Git 存储库时,您可以使用 SSH 密钥对来确保安全性。以下是关于如何生成和使用 SSH 密钥对的详细步骤: 生成 SSH 密钥对
144 2
|
5天前
|
监控 安全 网络安全
局域网管理监控的远程访问控制:利用SSH和Python实现安全管理
在当今数字化时代,局域网管理监控对于确保网络安全至关重要。远程访问控制是一项关键任务,通过利用SSH(Secure Shell)和Python编程语言,我们可以实现更加安全的管理方法。本文将介绍如何使用这两者结合,为局域网管理提供可靠的远程访问控制。
202 1
QGS
|
5天前
|
安全 Java Linux
浅谈springboot整合ganymed-ssh2远程访问linux
浅谈springboot整合ganymed-ssh2远程访问linux
QGS
43 1
|
9月前
|
安全 网络协议 Linux
Linux SSH:安全远程访问与管理
SSH(Secure Shell)是一种网络协议,广泛应用于Linux系统中,用于在不安全的网络中进行安全的远程访问和管理。SSH协议通过加密和身份认证机制,确保数据传输的安全性和用户身份的可靠性。本文将深入探讨Linux下的SSH协议,包括工作原理、配置、密钥认证、安全性措施以及实际应用等,帮助读者充分了解SSH的重要性,并学会在Linux系统中正确使用SSH实现安全远程访问和管理。
307 0
|
5天前
|
缓存 网络协议 数据可视化
可视化文件编辑与SSH传输神器WinSCP如何公网远程访问本地服务器
可视化文件编辑与SSH传输神器WinSCP如何公网远程访问本地服务器
|
7月前
|
网络协议 安全 网络安全
无公网IP,公网SSH远程访问家中的树莓派【无公网IP内网穿透】
无公网IP,公网SSH远程访问家中的树莓派【无公网IP内网穿透】
|
8月前
|
网络协议 安全 网络安全
ssh远程访问及控制
ssh远程访问及控制
75 1
|
12月前
|
缓存 安全 网络安全
【SSH远程连接问题】在校园网内使用SSH服务远程访问云服务器,结果连接不上,误以为是服务器被攻击了。结果是因为......
【SSH远程连接问题】在校园网内使用SSH服务远程访问云服务器,结果连接不上,误以为是服务器被攻击了。结果是因为......
347 0