命令行手册

Man » sshd 在线手册 - sshd 手册页的详细在线文档

🌍
sshd — OpenSSH 守护程序

概要

sshd    [-46DdeGiqTtV]    [-C   connection_spec]   [-c   host_certificate_file]   [-E   log_file]
[-f config_file] [-g login_grace_time] [-h host_key_file] [-o option] [-p port] [-u len]

描述

sshd(OpenSSH 守护程序)是 ssh(1) 的守护程序。 它通过不安全的网络提供两个不信任主机之间安全的加密通信。

sshd  监听来自客户端的连接。 它通常在启动时从 /etc/init.d/ssh 启动。

它为每个传入连接生成一个新的守护程序。 生成的守护程序处理密钥交换、加密、身份验证、命令执行和数据交换。

sshd  可以使用命令行选项或配置文件(默认情况下为 sshd_config(5))进行配置;命令行选项会覆盖配置文件中指定的值。 sshd 在收到挂起信号 SIGHUP 时重新读取其配置文件,方法是使用其启动时使用的名称和选项执行自身,例如 /usr/sbin/sshd。

选项如下:

-4      强制 sshd 仅使用 IPv4 地址。

-6      强制 sshd 仅使用 IPv6 地址。

-C connection_spec

指定要用于 -T 扩展测试模式的连接参数。 如果提供,则应用配置文件中会适用的任何“匹配”指令,然后再将配置写入标准输出。 连接参数以关键字=值的形式提供,并且可以以任何顺序提供,也可以使用多个 -C 选项或作为逗号分隔的列表。 关键字为“addr”、“user”、“host”、“laddr”、“lport”和“rdomain”,分别对应于源地址、用户、已解析的源主机名、本地地址、本地端口号和路由域。 此外,还可以指定“invalid-user”标志(不带值参数),以模拟来自未知用户名的连接。

-c host_certificate_file

指定指向证书文件的路径,该文件用于在密钥交换期间标识 sshd。 证书文件必须与使用 -h 选项或 HostKey 配置指令指定的主机密钥文件匹配。

-D      如果指定此选项,sshd 将不会分离并且不会成为守护程序。 这允许轻松监视 sshd。

-d      调试模式。 服务器会将详细的调试输出发送到标准错误,并且不会将其自身置于后台。 服务器也不会进行 fork(2),并且只会处理一个连接。 此选项仅用于服务器的调试。 多个 -d 选项会增加调试级别。 最大值为 3。

-E log_file

将调试日志附加到 log_file,而不是系统日志。

-e

将调试日志写入标准错误,而不是系统日志。

-f config_file

指定配置文件名。 默认值为 /etc/ssh/sshd_config。 如果没有配置文件,sshd 将拒绝启动。

-G

解析并打印配置文件。 检查配置文件的有效性,将有效的配置输出到 stdout,然后退出。 还可以通过使用一个或多个 -C 选项来指定连接参数,从而应用匹配规则。

-g login_grace_time

为客户端提供身份验证时间(默认 120 秒)。 如果客户端在指定时间内未能对用户进行身份验证,则服务器将断开连接并退出。 值为零表示没有限制。

-h host_key_file

指定从中读取主机密钥的文件。 如果 sshd 未以 root 用户身份运行,则必须提供此选项(因为通常主机密钥文件只能由 root 用户读取)。 默认值为 /etc/ssh/ssh_host_ecdsa_key、/etc/ssh/ssh_host_ed25519_key 和 /etc/ssh/ssh_host_rsa_key。 可以为不同的主机密钥算法拥有多个主机密钥文件。

-i

指定 sshd 正在从 inetd(8) 运行。

-o option

可用于以配置文件中使用的格式提供选项。 这对于指定没有单独命令行标志的选项非常有用。 有关选项及其值的完整详细信息,请参阅 sshd_config(5)。

-p port

指定服务器侦听连接的端口(默认 22)。 允许使用多个端口选项。 在命令行中指定端口时,配置文件中通过 Port 选项指定的端口将被忽略。 使用 ListenAddress 选项指定的端口会覆盖命令行端口。

-q

静默模式。 不会将任何内容发送到系统日志。 通常,每次连接的开始、身份验证和终止都会被记录。

-T

扩展测试模式。 检查配置文件的有效性,将有效的配置输出到 stdout,然后退出。 还可以通过使用一个或多个 -C 选项来指定连接参数,从而应用匹配规则。 这类似于 -G 标志,但它还包括 -t 标志执行的附加测试。

-t

测试模式。 仅检查配置文件的有效性和密钥的合理性。 这对于可靠地更新 sshd 非常有用,因为配置选项可能会更改。

-u len

此选项用于指定 utmp 结构中用于保存远程主机名的字段的大小。 如果解析的主机名长于 len,则将使用点分十进制值。 这允许具有非常长的主机名的主机仍然可以被唯一标识。 指定 -u0 表示仅应将点分十进制地址放入 utmp 文件中。 -u0 也可以用于防止 sshd 进行 DNS 请求,除非身份验证机制或配置需要这样做。 可能需要 DNS 的身份验证机制包括 HostbasedAuthentication 和在密钥文件中使用 from="pattern-list" 选项。 需要 DNS 的配置选项包括在 AllowUsers 或 DenyUsers 中使用 USER@HOST 模式。


-V 显示版本号并退出。

身份验证

OpenSSH SSH 守护程序仅支持 SSH 协议 2。每个主机都有一个主机特定的密钥,用于标识该主机。每当客户端连接时,守护程序都会响应其公共主机密钥。客户端将主机密钥与自己的数据库进行比较,以验证它是否已更改。通过 Diffie-Hellman 密钥协商提供前向保密。此密钥协商会生成一个共享会话密钥。会话的其余部分使用对称密码进行加密。客户端从服务器提供的算法中选择要使用的加密算法。此外,还通过加密消息认证码 (MAC) 提供会话完整性。

最后,服务器和客户端进入身份验证对话。客户端尝试使用基于主机的身份验证、公钥身份验证、质询-响应身份验证或密码身份验证来验证其身份。

无论身份验证类型如何,都会检查帐户以确保其可访问。如果帐户被锁定、列在 DenyUsers 中或其组列在 DenyGroups 中,则该帐户不可访问。锁定的帐户的定义取决于系统。某些平台具有自己的帐户数据库(例如 AIX),而其他平台则修改 passwd 字段(Solaris 和 UnixWare 上的“*LK*”、HP-UX 上的“*”、Tru64 上的“Nologin”、FreeBSD 上的以“*LOCKED”开头的字符串以及大多数 Linux 上的以“!”开头的字符串)。如果需要为帐户禁用密码身份验证,同时仍然允许使用公钥,则 passwd 字段应设置为其他值(例如“NP”或“*NP*”)。

如果客户端成功验证其身份,则进入用于准备会话的对话。此时,客户端可以请求诸如分配伪终端、转发 X11 连接、转发 TCP 连接或通过安全通道转发身份验证代理连接之类的内容。

之后,客户端要么请求一个交互式 shell,要么请求执行一个非交互式命令,sshd 将通过用户的 shell 使用其 -c 选项来执行该命令。然后双方进入会话模式。在这种模式下,双方可以在任何时候发送数据,并且这些数据将转发到服务器端的外壳或命令以及客户端的用户终端。

当用户程序终止并且所有转发的 X11 和其他连接都已关闭时,服务器会将命令退出状态发送到客户端,并且双方退出。


登录流程

当用户成功登录时,sshd 会执行以下操作:

      如果登录是在 tty 上进行的,并且没有指定命令,则会打印上次登录时间以及 /etc/motd(除非在配置文件中或通过 ~/.hushlogin 进行了阻止;请参见“文件”部分)。

      如果登录是在 tty 上进行的,则会记录登录时间。

      检查 /etc/nologin;如果存在,则打印其内容并退出(除非是 root 用户)。

      切换为使用普通用户权限运行。

      设置基本的环境。

      读取文件 ~/.ssh/environment(如果存在),并且允许用户更改其环境。请参见 sshd_config(5) 中的 PermitUserEnvironment 选项。

      切换到用户的家目录。

      如果 ~/.ssh/rc 存在并且 sshd_config(5) 中的 PermitUserRC 选项已设置,则运行它;否则,如果 /etc/ssh/sshrc 存在,则运行它;否则,运行 [xauth]({filename}../../xauth)(1)。“rc”文件会通过标准输入接收 X11 身份验证协议和 cookie。请参见“SSHRC”,如下所示。

      运行用户的 shell 或命令。所有命令都在用户的登录 shell 下运行,该 shell 在系统密码数据库中指定。

SSHRC

如果文件 ~/.ssh/rc 存在,则 sh(1) 会在读取环境文件后但在启动用户的 shell 或命令之前运行它。它不得在 stdout 上产生任何输出;必须使用 stderr。如果使用 X11 转发,它将通过标准输入接收“proto cookie”对(并且 DISPLAY 将位于其环境中)。该脚本必须调用 xauth(1),因为 sshd 不会自动运行 xauth 以添加 X11 cookie。

此文件的主要目的是运行任何在用户的主目录变得可用之前可能需要的初始化例程;AFS 是此类环境的一个例子。

此文件可能包含一些初始化代码,然后是类似以下内容的内容:

if read proto cookie && [ -n "$DISPLAY" ]; then
if [ `echo $DISPLAY | cut -c1-10` = 'localhost:' ]; then
# X11UseLocalhost=yes
echo add unix:`echo $DISPLAY |
cut -c11-` $proto $cookie
else
# X11UseLocalhost=no
echo add $DISPLAY $proto $cookie
fi | xauth -q fi

如果此文件不存在,则运行 /etc/ssh/sshrc,如果该文件也不存在,则使用 xauth 添加 cookie。

AUTHORIZED_KEYS 文件格式

AuthorizedKeysFile 指定包含用于公钥身份验证的公钥的文件;如果未指定此选项,则默认值为 ~/.ssh/authorized_keys 和 ~/.ssh/authorized_keys2。文件中的每一行都包含一个密钥(空行和以“#”开头的行将被忽略为注释)。公钥由以下空格分隔的字段组成:选项、密钥类型、base64 编码的密钥、注释。选项字段是可选的。支持的密钥类型包括:

_
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
_
ssh-ed25519
ssh-rsa

注释字段不用于任何目的(但可能方便用户识别密钥)。

请注意,此文件中的行可以很长,最多可达几百个字节(因为公共密钥编码的大小),上限为 8 千字节,这允许使用高达 16 千比特的 RSA 密钥。你不应该手动输入它们;相反,复制 id_ecdsa.pub、id_ecdsa_sk.pub、id_ed25519.pub、id_ed25519_sk.pub 或 id_rsa.pub 文件,然后进行编辑。

sshd 强制执行 RSA 密钥模数的最小大小为 1024 位。

选项(如果存在)由逗号分隔的选项规范组成。不允许有空格,除非在双引号内。支持以下选项规范(请注意,选项关键字不区分大小写):

agent-forwarding

启用身份验证代理转发,此前已通过 restrict 选项禁用。

cert-authority

指定列出的密钥是一个证书颁发机构 (CA),可用于验证用于用户身份验证的签名证书。

证书可以编码与这些密钥选项类似的访问限制。如果同时存在证书限制和密钥选项,则将应用两者中最严格的组合。

command="command"

指定每当使用此密钥进行身份验证时,都应执行该命令。用户提供的命令(如果有)将被忽略。如果客户端请求 pty,则命令将在 pty 上运行;否则,它将在没有 tty 的情况下运行。如果需要 8 位干净通道,则不应请求 pty 或应指定 no-pty。可以通过使用反斜杠来在命令中包含引号。

此选项可能用于将某些公共密钥限制为仅执行特定操作。例如,一个密钥可能仅允许进行远程备份,而不能执行其他操作。请注意,客户端可以指定 TCP 和/或 X11 转发,除非明确禁止,例如使用 restrict 密钥选项。

客户端最初提供的命令可在 SSH_ORIGINAL_COMMAND 环境变量中找到。请注意,此选项适用于 shell、命令或子系统执行。另请注意,此命令可能会被 sshd_config(5) 中的 ForceCommand 指令覆盖。

如果指定了命令,并且嵌入在用于身份验证的证书中的强制命令,那么只有当这两个命令相同时,证书才会被接受。

environment="NAME=value"

指定在使用此密钥登录时,应将该字符串添加到环境中。通过这种方式设置的环境变量将覆盖其他默认环境值。可以指定多个此类型的选项。默认情况下禁用环境处理,并由 PermitUserEnvironment 选项控制。

expiry-time="timespec"

指定一个时间,之后密钥将不再被接受。时间可以指定为 YYYYMMDD[Z] 日期或 YYYYMMDDHHMM[SS][Z] 时间。日期和时间将解释为系统时区,除非以 Z 字符结尾,在这种情况下,它们将解释为 UTC 时区。


from="pattern-list"

指定除了公钥身份验证之外,远程主机的规范名称或其 IP 地址必须存在于逗号分隔的模式列表中。 有关模式的更多信息,请参见 ssh_config(5) 中的 PATTERNS。

除了可以应用于主机名或地址的通配符匹配之外,from 节还可以使用 CIDR 地址/掩码长度表示法来匹配 IP 地址。

此选项的目的是可选地提高安全性:单独的公钥身份验证不会信任网络或名称服务器或任何内容(除了密钥);但是,如果有人以某种方式窃取了密钥,则该密钥允许入侵者从世界上的任何地方登录。此附加选项使使用被盗密钥更加困难(除了密钥之外,还必须破坏名称服务器和/或路由器)。

no-agent-forwarding

禁止在使用此密钥进行身份验证时进行身份验证代理转发。

no-port-forwarding

禁止在使用此密钥进行身份验证时进行 TCP 转发。客户端发出的任何端口转发请求都将返回错误。例如,这可用于与 command 选项结合使用。

no-pty

防止分配 tty(请求分配 tty 将失败)。

no-user-rc

禁用执行 ~/.ssh/rc。

no-X11-forwarding

禁止在使用此密钥进行身份验证时进行 X11 转发。客户端发出的任何 X11 转发请求都将返回错误。

permitlisten="[host:]port"

限制使用 ssh(1) 的 -R 选项进行远程端口转发,以便它只能侦听指定的 host(可选)和 port。可以通过将地址放在方括号中来指定 IPv6 地址。可以应用多个 permitlisten 选项,并用逗号分隔。主机名可以包含 PATTERNS 部分中 ssh_config(5) 中描述的通配符。端口规范 * 匹配任何端口。请注意,GatewayPorts 的设置可能会进一步限制侦听地址。请注意,ssh(1) 如果在请求转发时未指定侦听主机,则会发送主机名为“localhost”,并且该名称与显式 localhost 地址“127.0.0.1”和“::1”的处理方式不同。

permitopen="host:port"

限制使用 ssh(1) 的 -L 选项进行本地端口转发,以便它只能连接到指定的主机和端口。可以通过将地址放在方括号中来指定 IPv6 地址。可以应用多个 permitopen 选项,并用逗号分隔。不会对指定的主机名执行模式匹配或名称查找,它们必须是文字主机名和/或地址。端口规范 * 匹配任何端口。

port-forwarding

启用先前由 restrict 选项禁用的端口转发。


principals="principals"

在 cert-authority 行中,指定允许的用于证书身份验证的主体,以逗号分隔的列表。证书的列表中必须至少包含一个名称,才能接受该证书。如果密钥未被标记为使用 cert-authority 选项中的可信证书签名者,则此选项将被忽略。

pty 允许分配终端,此前终端分配被 restrict 选项禁用。

no-touch-required

对于使用此密钥进行的签名,不需要演示用户存在。此选项仅适用于 FIDO 身份验证器算法 ecdsa-sk 和 ed25519-sk。

verify-required

要求使用此密钥进行的签名必须证明已验证用户身份,例如通过 PIN 码。此选项仅适用于 FIDO 身份验证器算法 ecdsa-sk 和 ed25519-sk。

restrict

启用所有限制,即禁用端口、代理和 X11 转发,以及禁用 PTY 分配和执行 ~/.ssh/rc。如果将来在 authorized_keys 文件中添加任何其他限制功能,它们将包含在此集中。

tunnel="n"

强制服务器上使用 tun(4) 设备。如果没有此选项,如果客户端请求隧道,将使用下一个可用的设备。

user-rc

启用执行 ~/.ssh/rc,此前执行被 restrict 选项禁用。

X11-forwarding

允许 X11 转发,此前 X11 转发被 restrict 选项禁用。

authorized_keys 文件的示例:

# 行首允许注释。允许空行。
# 普通密钥,无限制
ssh-rsa ...
# 强制命令,禁用 PTY 和所有转发
restrict,command="dump /home" ssh-rsa ...
# 限制 ssh -L 转发目标
permitopen="192.0.2.1:80",permitopen="192.0.2.2:25" ssh-rsa ...
# 限制 ssh -R 转发监听器
permitlisten="localhost:8080",permitlisten="[::1]:22000" ssh-rsa ...
# 隧道转发配置
tunnel="0",command="sh /etc/netstart tun0" ssh-rsa ...
# 覆盖限制以允许 PTY 分配
restrict,pty,command="nethack" ssh-rsa ...
# 允许 FIDO 密钥,无需触摸
no-touch-required _ ...
# 要求 FIDO 密钥进行用户验证(例如,PIN 码或生物识别)
verify-required _ ...
# 信任 CA 密钥,如果证书中请求,则允许无触摸 FIDO
cert-authority,no-touch-required,principals="user_a" ssh-rsa ...

SSH_KNOWN_HOSTS 文件格式

/etc/ssh/ssh_known_hosts 和 ~/.ssh/known_hosts 文件包含所有已知主机的公共密钥。全局文件应由管理员准备(可选),并且用户文件会自动维护:每当用户连接到未知主机时,其密钥将添加到用户文件中。

这些文件中的每一行包含以下字段:标记(可选)、主机名、密钥类型、base64 编码的密钥、注释。这些字段由空格分隔。

标记是可选的,但如果存在,则必须是“@cert-authority”,以指示该行包含证书颁发机构 (CA) 密钥,或者“@revoked”,以指示该行包含的密钥已被撤销,并且绝不能接受。每行密钥只能使用一个标记。

^ ostnames 是一个逗号分隔的模式列表(*? 作为通配符);每个模式依次与主机名进行匹配。当 sshd 验证客户端时,例如在使用 HostbasedAuthentication 时,这将是规范化的客户端主机名。当 [ssh]({filename}../../ssh)(1) 验证服务器时,这将是用户提供的主机名,如果指定了 [ssh]({filename}../../ssh)(1)HostkeyAlias,或者如果使用了 [ssh]({filename}../../ssh)(1)CanonicalizeHostname 选项,则为规范化的服务器主机名。

模式也可以以 ! 开头,表示否定:如果主机名与否定模式匹配,则该模式不会被接受(在该行中),即使它与该行中的另一个模式匹配。主机名或地址可以可选地包含在 [] 括号中,然后是 : 和一个非标准端口号。

或者,主机名可以存储在哈希形式中,以隐藏主机名和地址,以防文件内容被泄露。哈希主机名以 | 字符开头。在一行中只能出现一个哈希主机名,并且不能应用上述否定或通配符运算符。

密钥类型和 base64 编码的密钥直接从主机密钥中获取;例如,可以从 /etc/ssh/ssh_host_rsa_key.pub 中获取。可选的注释字段一直持续到行尾,不使用。

\# 开头的行和空行将被忽略,作为注释。

在执行主机身份验证时,如果任何匹配的行具有正确的密钥,则身份验证将被接受;要么是与密钥完全匹配的密钥,或者如果服务器已呈现用于身份验证的证书,则是对证书进行签名的证书颁发机构的密钥。要将密钥信任为证书颁发机构,它必须使用上面描述的“@cert-authority”标记。

^ nown_hosts 文件还提供了一种将密钥标记为已撤销的机制,例如,当已知关联的私钥已被盗时。已撤销的密钥是通过在密钥行的开头包含“@revoked”标记来指定的,并且永远不会被接受用于身份验证或作为证书颁发机构,而是会在 [ssh]({filename}../../ssh)(1) 遇到它们时产生警告。

允许(但不推荐)对同一名称使用多行或不同的主机密钥。当来自不同域的同一主机名的短形式被放入文件中时,这不可避免地会发生。文件中可能包含冲突的信息;如果可以从任一文件中找到有效信息,则身份验证将被接受。


请注意,这些文件中的行通常有数百个字符长,你绝对不想手动输入主机密钥。相反,可以使用脚本、ssh-keyscan(1) 或获取例如 /etc/ssh/ssh_host_rsa_key.pub,并在其前面添加主机名来生成它们。ssh-keygen(1) 还提供了一些基本的自动化编辑功能,用于编辑 ~/.ssh/known_hosts,包括删除与主机名匹配的主机,并将所有主机名转换为其哈希表示形式。

一个 ssh_known_hosts 文件的示例:

# 行首允许注释
cvs.example.net,192.0.2.10 ssh-rsa AAAA1234.....=
# 一个哈希的主机名
|1|JfKTdBh7rNbXkVAQCRp4OQoPfmI=|USECr3SWf1JUPsms5AqfD5QfxkM= ssh-rsa
AAAA1234.....=
# 一个已撤销的密钥
@revoked * ssh-rsa AAAAB5W...
# 一个 CA 密钥,可用于 *.mydomain.com 或 *.mydomain.org 中的任何主机
@cert-authority *.mydomain.org,*.mydomain.com ssh-rsa AAAAB5W...

文件

~/.hushlogin

如果启用了 PrintLastLogPrintMotd,则此文件用于抑制打印上次登录时间和 /etc/motd。它不会抑制打印 Banner 中指定的横幅。

~/.rhosts

此文件用于基于主机的身份验证(有关更多信息,请参阅 ssh(1))。在某些机器上,如果用户的家目录位于 NFS 分区上,则此文件可能需要是世界可读的,因为 sshd 会以 root 身份读取它。此外,此文件必须由用户拥有,并且不能允许其他人具有写入权限。对于大多数机器,推荐的权限是用户可读/写,并且其他人无法访问。

~/.shosts

此文件与 .rhosts 的使用方式完全相同,但允许基于主机的身份验证,而无需允许使用 rlogin/rsh 进行登录。

~/.ssh/

此目录是所有用户特定配置和身份验证信息的默认位置。没有普遍要求对该目录的整个内容保密,但建议的权限是用户可读/写/执行,并且其他人无法访问。

~/.ssh/authorized_keys

列出了可以用于以该用户身份登录的公钥(ECDSA、Ed25519、RSA)。此文件的格式在上面描述。该文件的内容不是高度敏感的,但建议的权限是用户可读/写,并且其他人无法访问。

如果此文件、~/.ssh 目录或用户的家目录可由其他用户写入,则未经授权的用户可以修改或替换该文件。在这种情况下,除非将 StrictModes 选项设置为“no”,否则 sshd 不会允许使用它。

~/.ssh/environment

如果存在,则此文件在登录时读取到环境中。它只能包含空行、注释行(以“#”开头)和赋值行,格式为 name=value。该文件应仅由用户可写;它不必为任何人可读。默认情况下禁用环境处理,并通过 PermitUserEnvironment 选项进行控制。


~/.ssh/known_hosts
包含用户已登录的所有主机的主机密钥列表,这些主机不在系统范围内的已知主机密钥列表中。该文件的格式如上所述。此文件应仅由 root/所有者写入,并且可以(但不一定需要)被所有人读取。

~/.ssh/rc
包含在用户的主目录变得可用之前要运行的初始化例程。此文件应仅由用户写入,并且不需要被其他人读取。

/etc/hosts.allow
/etc/hosts.deny
用于由 tcp-wrappers 强制执行的访问控制在此处定义。更多详细信息请参见 hosts_access(5)。

/etc/hosts.equiv
此文件用于基于主机的身份验证(请参阅 [ssh]({filename}../../ssh)(1))。它应该仅由 root 写入。

/etc/ssh/moduli
包含用于“Diffie-Hellman Group Exchange”密钥交换方法中的 Diffie-Hellman 组。文件格式在 moduli(5) 中描述。如果在文件中找不到可用的组,则将使用固定的内部组。

/etc/motd
请参阅 motd(5)。

/etc/nologin
如果此文件存在,sshd 将拒绝允许任何非 root 用户登录。文件的内容将显示给任何尝试登录的人,并且非 root 连接将被拒绝。该文件应可供所有人读取。

/etc/ssh/shosts.equiv
此文件以与 hosts.equiv 完全相同的方式使用,但允许基于主机的身份验证,而无需允许使用 rlogin/rsh 登录。

/etc/ssh/ssh_host_ecdsa_key
/etc/ssh/ssh_host_ed25519_key
/etc/ssh/ssh_host_rsa_key
这些文件包含主机密钥的私有部分。这些文件应仅由 root 拥有,仅由 root 可读,并且不能供其他人访问。请注意,如果这些文件是组/世界可访问的,则 sshd 不会启动。

/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_rsa_key.pub
这些文件包含主机密钥的公共部分。这些文件应可供所有人读取,但仅由 root 写入。它们的内容应与各自的私有部分匹配。这些文件实际上不用于任何目的;它们是为了用户的方便而提供的,以便可以将它们的内容复制到 known_hosts 文件中。这些文件是使用 ssh-keygen(1) 创建的。

/etc/ssh/ssh_known_hosts
系统范围内的已知主机密钥列表。此文件应由系统管理员准备,以包含组织中所有机器的公共主机密钥。该文件的格式如上所述。此文件应仅由 root/所有者写入,并且应可供所有人读取。

/etc/ssh/sshd_config
包含 sshd 的配置数据。文件格式和配置选项在 sshd_config(5) 中描述。

/etc/ssh/sshrc
类似于 ~/.ssh/rc,它可以用于全局地指定特定于机器的登录时初始化。此文件应仅由 root 写入,并且应可供所有人读取。

/run/sshd
chroot(2)  目录,由 sshd 在身份验证前的特权分离阶段使用。该目录不应包含任何文件,并且必须由 root 用户拥有,并且不能由组或其他用户写入。

/run/sshd.pid
包含用于监听连接的 sshd 进程的进程 ID(如果同时运行多个守护程序以用于不同的端口,则包含最后启动的守护程序的进程 ID)。此文件的内容不敏感;它可以是世界可读的。

参见

scp(1), sftp(1), ssh(1), ssh-add(1), ssh-agent(1), ssh-keygen(1), ssh-keyscan(1), chroot(2), hosts_access(5), moduli(5), sshd_config(5), inetd(8), sftp-server(8)

作者

OpenSSH 是 Tatu Ylonen 最初的免费 ssh 1.2.12 版本的衍生版本。Aaron Campbell、Bob Beck、Markus Friedl、Niels Provos、Theo de Raadt 和 Dug Song 删除了许多错误,重新添加了较新的功能,并创建了 OpenSSH。Markus Friedl 贡献了对 SSH 协议版本 1.5 和 2.0 的支持。Niels Provos 和 Markus Friedl 贡献了特权分离的支持。