SSH概述与配置文件说明

tech2025-12-07  6

一、什么是SSH?

SSH是一种网络协议,用于计算机之间的加密登录。在出现SSH之前,系统管理员需要登入远程服务器执行系统管理任务时,都是用telnet来实现的,telnet协议采用明文密码传送,在传送过程中对数据也不加密,很容易被不怀好意的人在网络上监听到密码。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。

二、SSH两种方式的用户登录认证: SSH连接是CS模型(客户端-服务器),客户端发出连接申请,服务器对客户端进行验证,再考虑是否接受连接申请。 SSH的安全加密方式的理论基础是非对称加密体系

1、基于password:

只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。

大致流程:

客户端发起ssh请求,服务器会把自己的公钥发送给用户 用户会根据服务器发来的公钥对密码进行加密 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功

2、基于密钥的登录方式:

需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

大致流程:

首先在客户端生成一对密钥 并将客户端的公钥ssh-copy-id拷贝到服务器端 当客户端再次发送一个连接请求,包括ip、用户名 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,服务器就会发出“质询”(challenge)表现为一串随机字符,如:abcd。 服务端将使用客户端拷贝过来的公钥对“质询”进行加密,然后发送给客户端 得到服务端发来“质询”后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录

两种登录认证的对比:

基于密钥的认证方式,用户必须指定自己密钥的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。

第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程会比基于passwd认证稍长,可能需要10秒

三、OpenSSH配置文件 OpenSSH常用配置文件有两个/etc/ssh/ssh_config 和 /etc/ssh/sshd_config ssh_config 为客户端配置文件,sshd_config 为服务端配置文件,此外/etc/ssh/目录中还有一些其他文件,对这些文件进行下说明:

moduli # 配置用于构建安全传输层 所必须的密钥组 ssh_host_ecdsa_key #SSH2版本所使用的ecdsa私钥 ssh_host_ecdsa_key.pub #SSH2版本所使用的ecdsa公钥 ssh_host_ed25519_key #SSH2版本所使用的ed25519私钥 ssh_host_ed25519_key.pub #SSH2版本所使用的ed25519公钥 ssh_host_rsa_key #SSH2版本所使用的RSA私钥 ssh_host_rsa_key.pub #SSH2版本所使用的RSA公钥

1、SSH客户端配置文件

/etc/ssh/ssh——config

配置文件概要

=========================================== Host * #选项“Host”只对能够匹配后面字串的计算机有效。“*”表示所有的计算机。

ForwardAgent no #设置连接是否经过验证代理(如果存在)转发给远程计算机。 ForwardX11 no #设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set) RhostsAuthentication no #设置是否使用基于rhosts的安全验证。 RhostsRSAAuthentication no #设置是否使用用RSA算法的基于rhosts的安全验证。 RSAAuthentication yes #设置是否使用RSA算法进行安全验证。 PasswordAuthentication yes #设置是否使用口令验证。 FallBackToRsh no #设置如果用ssh连接出现错误是否自动使用rsh。 UseRsh no #设置是否在这台计算机上使用“rlogin/rsh”。 BatchMode no #如果设为“yes”,passphrase/password(交互式输入口令)的提示将被禁止。当不能交互式输入口令的时候, 这个选项对脚本文件和批处理任务十分有用。 CheckHostIP yes #设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为“yes”。 StrictHostKeyChecking no #如果设置成“yes”,ssh就不会自动把计算机的密匙加入“$HOME/.ssh/known_hosts”文件, 并且一旦计算机的密匙发生了变化, 就拒绝连接。 IdentityFile ~/.ssh/identity #设置从哪个文件读取用户的RSA安全验证标识。 Port 22 #设置连接到远程主机的端口。 Protocol 2,1   # 选择的 SSH 协议版本,可以是 1 也可以是 2 ,如果要同时支持两者,就必须要使用 2,1 这个分隔了! GSSAPIAuthenticationno #是否允许使用基于GSSAPI 的用户认证.默认值为"yes".仅用于SSH-2 Cipher blowfish #设置加密用的密码。 EscapeChar ~ #设置escape字符。

======================================================================================

2、SSH服务端守护程序配置文件

/etc/ssh/sshd_config

=========================================== AddressFamily any

指定 sshd 应当使用哪种地址族。取值范围是:“any”(默认)、“inet”(仅IPv4)、“inet6”(仅IPv6)。 any表示二者均有。

AuthorizedKeysFile .ssh/authorized_keys

指定包含用于用户身份验证的公钥的文件

AllowGroups

这个指令后面跟着一串用空格分隔的组名列表(其中可以使用"*“和”?“通配符)。默认允许所有组登录。如果使用了这个指令,那么将仅允许这些组中的成员登录,而拒绝其它所有组。这里的"组"是指"主组”(primary group),也就是/etc/passwd文件中指定的组。这里只允许使用组的名字而不允许使用GID。相关的 allow/deny 指令按照下列顺序处理:DenyUsers, AllowUsers, DenyGroups, AllowGroups

AllowUsers

这个指令后面跟着一串用空格分隔的用户名列表(其中可以使用"*“和”?"通配符)。默认允许所有用户登录。如果使用了这个指令,那么将仅允许这些用户登录,而拒绝其它所有用户。如果指定了 USER@HOST 模式的用户,那么 USER 和 HOST 将同时被检查。这里只允许使用用户的名字而不允许使用UID。相关的 allow/deny 指令按照下列顺序处理:DenyUsers, AllowUsers, DenyGroups, AllowGroups

Banner

将这个指令指定的文件中的内容在用户进行认证前显示给远程用户。这个特性仅能用于SSH-2,默认什么内容也不显示。"none"表示禁用这个特性。

Compression yes

是否可以使用压缩指令?

ChallengeResponseAuthentication yes

是否允许质疑-应答(challenge-response)认证。默认值是"yes"。所有 login.conf 中允许的认证方式都被支持。规定的认证方式,均可适用!

DenyGroups

这个指令后面跟着一串用空格分隔的组名列表(其中可以使用"*“和”?“通配符)。默认允许所有组登录。 如果使用了这个指令,那么这些组中的成员将被拒绝登录。 这里的"组"是指"主组”(primary group),也就是/etc/passwd文件中指定的组。这里只允许使用组的名字而不允许使用GID。相关的 allow/deny 指令按照下列顺序处理: DenyUsers, AllowUsers,DenyGroups,AllowGroups,

DenyUsers

这个指令后面跟着一串用空格分隔的用户名列表(其中可以使用"*“和”?"通配符)。默认允许所有用户登录。 如果使用了这个指令,那么这些用户将被拒绝登录。 如果指定了 USER@HOST 模式的用户,那么 USER 和 HOST 将同时被检查。 这里只允许使用用户的名字而不允许使用UID。相关的 allow/deny 指令按照下列顺序处理: DenyUsers, AllowUsers, DenyGroups, AllowGroups

ForceCommand

强制执行这里指定的命令而忽略客户端提供的任何命令。这个命令将使用用户的登录shell执行(shell -c)。这可以应用于 shell 、命令、子系统的完成,通常用于 Match 块中。这个命令最初是在客户端通过 SSH_ORIGINAL_COMMAND 环境变量来支持的。

HostKey /etc/ssh/ssh_host_key

SSH version 1 使用的私钥

HostKey /etc/ssh/ssh_host_rsa_key

SSH version 2 使用的 RSA 私钥

HostKey /etc/ssh/ssh_host_dsa_key

SSH version 2 使用的 DSA 私钥

HostbasedAuthentication no

在开启 HostbasedAuthentication 的情况下, 指定服务器在使用 ~/.shosts ~/.rhosts /etc/hosts.equiv 进行远程主机名匹配时,是否进行反向域名查询。 “yes"表示 sshd 信任客户端提供的主机名而不进行反向查询。默认值是"no”。

IgnoreRhosts yes

是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中忽略 .rhosts 和 .shosts 文件。不过 /etc/hosts.equiv 和 /etc/shosts.equiv 仍将被使用。推荐设为默认值"yes"。

IgnoreUserKnownHosts no

是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中忽略用户的 ~/.ssh/known_hosts 文件。默认值是"no"。为了提高安全性,可以设为"yes"。

KeyRegenerationInterval 3600

由前面联机的说明可以知道, version 1 会使用 server 的 Public Key ,每隔一段时间来重新建立一次!时间为秒!

ListenAddress 0.0.0.0

监听的主机适配卡!举个例子来说,如果您有两个 IP,分别是 192.168.0.100 及 192.168.2.20 ,那么只想要开放 192.168.0.100 时, 就可以写如同下面的样式: ListenAddress 192.168.0.100 只监听来自 192.168.0.100 这个IP 的SSH联机。如果不使用设定的话,则预设所有接口均接受 SSH,即:0.0.0.0表示本机的所有地址

ListenAddress ::

指明监听的IPV6的所有地址格式。

LoginGraceTime 600

当使用者连上 SSH server 之后,会出现输入密码的画面,在该画面中,在多久时间内没有成功连上 SSH server ,就断线!时间为秒!

LogLevel INFO

指定 sshd 的日志等级(详细程度)

MaxAuthTries 6

指定每个连接最大允许的认证次数。默认值是 6 。 如果失败认证的次数超过这个数值的一半,连接将被强制断开,且会生成额外的失败日志消息。

Maxsessions 10

同一地址的最大连接数,也就是同一个IP地址最大可以保持多少个链接

MaxStartups 10:30:100

同时允许几个尚未登入的联机画面,所谓联机画面就是在你ssh登录的时候,没有输入密码的阶段。

Port 22

SSH 预设使用 22 这个 port,您也可以使用多的 port !

Protocol 2,1

选择的 SSH 协议版本,可以是 1 也可以是 2 ,如果要同时支持两者,就必须要使用 2,1 这个分隔了!

PidFile /var/run/sshd.pid

可以放置 SSHD 这个 PID 的档案!左列为默认值

PermitRootLogin no

是否允许 root 用户直接登录,如果想root直接登录设置为yes,安全方面的考虑最好设置成no

PubkeyAuthentication yes

是否允许公钥认证。仅可以用于SSH-2

PasswordAuthentication yes

是否允许使用基于密码的认证

PermitEmptyPasswords no

上面那一项如果设定为 yes 的话,这一项就最好设定为 no ,这项为是否允许密码为空的用户远程登录

PAMAuthenticationViaKbdInt yes

是否启用其它的 PAM 模块!启用这个模块将会导致 PasswordAuthentication 设定失效!

PrintMotd no

指定 sshd 是否在每一次交互式登录时打印 /etc/motd 文件的内容。

PrintLastLog yes

指定 sshd 是否在每一次交互式登录时打印最后一位用户的登录时间。

RSAAuthentication yes

是否使用纯的 RSA 认证!?仅针对 version 1 !

RhostsAuthentication no

本机系统不使用 .rhosts , .rhosts 不安全!

RhostsRSAAuthentication no 是否使用强可信主机认证(通过检查远程主机名和关联的用户名进行认证)。仅用于SSH-1。

这是通过在RSA认证成功后再检查 ~/.rhosts 或 /etc/hosts.equiv 进行认证的。 出于安全考虑,建议使用默认值"no"。

Subsystem

配置一个外部子系统(例如,一个文件传输守护进程)。仅用于SSH-2协议。 值是一个子系统的名字和对应的命令行(含选项和参数)。

ServerKeyBits 1024

Server key 的长度!

SyslogFacility AUTH

配置sshd发送到syslog所使用的日志类型,当有人使用ssh登录系统的时候,SSH会记录信息,信息保存在/var/log/secure里面

SyslogFacility AUTHPRIV

默认日志类型为AUTHPRIV

StrictModes yes

指定是否要求 sshd在接受连接请求前对用户主目录和相关的配置文件进行宿主和权限检查。 强烈建议使用默认值"yes"来预防可能出现的低级错误。

UserLogin no

在 SSH 底下本来就不接受 login 这个程序的登入!

UsePrivilegeSeparation yes

是否让 sshd 通过创建非特权子进程处理接入请求的方法来进行权限分离。默认值是"yes"。认证成功后,将以该认证用户的身份创建另一个子进程。 这样做的目的是为了防止通过有缺陷的子进程提升权限,从而使系统更加安全。

UseDNS yes

指定 sshd是否应该对远程主机名进行反向解析,以检查此主机名是否与其IP地址真实对应

UseLogin

是否在交互式会话的登录过程中使用 login 。默认值是"no"。如果开启此指令,那么 X11Forwarding 将会被禁止,因为 login不知道如何处理 xauth cookies 。需要注意的是,login 是禁止用于远程执行命令的。如果指定了 UsePrivilegeSeparation ,那么它将在认证完成后被禁用。

UsePAM yes

利用 PAM 管理使用者认证有很多好处,可以记录与管理。所以这里我们建议你使用 UsePAM 且 ChallengeResponseAuthentication 设定为 no

X11DisplayOffset

指定 sshd X11 转发的第一个可用的显示区(display)数字。默认值是 10 。这个可以用于防止 sshd 占用了真实的 X11 服务器显示区,从而发生混淆。

X11Forwarding

是否允许进行 X11 转发。默认值是"no",设为"yes"表示允许。如果允许X11转发并且sshd 代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。那么将可能有额外的信息被泄漏。由于使用X11转发的可能带来的风险,此指令默认值为"no"。需要注意的是,禁止X11转发并不能禁止用户转发X11通信,因为用户可以安装他们自己的转发器。如果启用了 UseLogin ,那么X11转发将被自动禁止。

X11UseLocalhost

sshd 是否应当将X11转发服务器绑定到本地loopback地址。默认值是"yes"。sshd 默认将转发服务器绑定到本地loopback地址并将 DISPLAY 环境变量的主机名部分设为"localhost"。这可以防止远程主机连接到 proxy display 。不过某些老旧的X11客户端不能在此配置下正常工作。为了兼容这些老旧的X11客户端,你可以设为"no"。

===========================================

最新回复(0)