[翻译]《OpenSSH 中文手册》

由于论坛排版效果不理想,而且我也只在我的个人空间对文章进行后继更新,所以建议直接到我的空间查看:
《moduli 中文手册》
《sftp-server 中文手册》
《sshd 中文手册》
《sshd_config 中文手册》
《ssh-keygen 中文手册》

此系列只包含服务器端相关的内容,客户端的手册页,有部分网上已经有人翻译了,google一下即可。

----------------------------------------------------------
MODULI(5) OpenBSD Programmer's Manual MODULI(5)

名称
moduli - 系统模数文件


描述
/etc/ssh/moduli 文件包含用于 sshd(8) 的全局范围的 Diffie-Hellman 素数模数(prime modulus)。

这个文件中的每一行都包含下列字段: Time, Type, Tests, Tries, Size, Generator, Modulus 。
字段之间使用空白符分隔。每个字段的具体含义如下:

Time: yyyymmddhhmmss 标明这一行被添加时刻的系统时间,00000000000000 表示未知。

Type: 整数 指定素模(prime modulus)的内部结构
0: 未知。表示在协议操作时从另一端获取,并保存下来以便将来分析。
1: 随意的结构。也就是一个普通的大数。
2: 安全的结构(p = 2q + 1)。满足基本的结构要求。
3: 满足Schnorr签名方案的要求。强度比较低。
4: Sophie-Germain(q = (p-1)/2)。索菲热尔曼素数,通常在检测素数强度的过程中生成。
5: 强安全的结构。通常用于生成RSA公钥。

Tests: 整数(位字段) 指定用于判断一个数是否是素数的方法。
可以是下面值的叠加,比如:6 表示同时使用 sieve 和 Miller-Rabin 方法。推荐使用 30 。
0: 不测试。表示在协议操作时从另一端获取,并保存下来以便将来分析。
1: 组合(composite)。会导致一个或多个测试失败。这种情况下,最高位用于指定失败的测试。
2: 筛子(sieve)。使用一组小素数来检查是否可以整除。
4: Miller-Rabin
8: Jacobi
16: 椭圆曲线(Elliptic Curve)

Tries: 整数 取决于最高有效测试位的值,不同的数值所代表的方法如下:
0: 不测试(总是零)
1: 组合
2: 筛子。过滤多少过素数,一般大约是 32,000,000 个。
4: Miller-Rabin; M-R 迭代次数,一般大约是 32 到 64 次。
8: Jacobi; 未知(总是零)
16: Elliptic Curve; 未使用(总是零)

Size: 整数 指定最高有效位的数量(0 到 1,000,000)

Generator: 16进制字符串 指定用于 Diffie-Hellman 交换最好的发生器。
0(未知或可变), 2, 3, 5, 等等...

Modulus: 16进制字符串 素数模数(prime modulus)

这个文件用于在需要模数的时候从中搜寻符合条件(Time, Size, Generator)的模数。
如果有多个模数都是合格的,那么将倾向于选择较新的模数,但也并不是说旧的模数就一定没有机会被使用。

可以使用 ssh-keygen(1) 工具来生成新模数。


文件
/etc/ssh/moduli

参见
ssh-keygen(1), sshd(8)

OpenBSD 4.2 May 31, 2007 2

--------------------------------------------------------
SFTP-SERVER(8) OpenBSD System Manager's Manual SFTP-SERVER(8)

名称
sftp-server - SFTP 服务器子系统


语法
sftp-server [-f log_facility] [-l log_level]

描述
sftp-server 是一个 SFTP 协议的服务端程序,它要求客户端从 stdin 发起请求,并将应答发送到 stdout 。
一般不直接调用 sftp-server ,而是通过 sshd(8) 配置文件中的 Subsystem 指令调用。

sftp-server 的命令行选项应当在 sshd 配置文件中的 Subsystem 指令中设置。

sshd_config(5) 手册页详细说明了 sshd 配置文件的细节。

命令行选项说明:

-f log_facility
指定 sftp-server 发送日志消息所使用的子系统。可以使用下面的值之一:
DAEMON, USER, AUTH(默认), LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7

-l log_level

指定 sftp-server 发送哪种等级的日志消息。可以使用下面的值之一:
QUIET, FATAL, ERROR(默认), INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3
INFO 和 VERBOSE 级别的日志究竟包含哪些信息取决于客户端。
DEBUG 和 DEBUG1 是等价的。DEBUG2 和 DEBUG3 则会输出更详细的调试信息。

参见
sftp(1), ssh(1), sshd_config(5), sshd(8)

历史
sftp-server 最早出现在 OpenBSD 2.8 版本中


作者
Markus Friedl <[email protected]>

OpenBSD 4.2 May 31, 2007 1

-------------------------------------------------------------

SSHD(8) OpenBSD System Manager's Manual SSHD(8)

名称
sshd - OpenSSH SSH 守护进程

语法
sshd [-46Ddeiqt] [-b bits] [-f config_file] [-g login_grace_time]
[-h host_key_file] [-k key_gen_time] [-o option] [-p port] [-u len]

描述
sshd 是 OpenSSH SSH 守护进程。用于在不可信网络上提供安全的连接通道。

sshd 守护进程通常由root用户启动,它监听来自客户端的连接,然后为每个连接派生一个子进程。
子进程负责处理密钥交换、加密、认证、执行命令、数据交换等具体事务。

sshd 的行为可以通过使用命令行选项和配置文件(默认是sshd_config(5))进行控制,但命令行选项会覆盖配置文件中的设置。
sshd 会在收到 SIGHUP 信号后重新读取配置文件,但是最初启动的命令行选项仍然有效(仍会覆盖配置文件中的设置)。

命令行选项说明:

-4 强制 sshd 只使用 IPv4 地址

-6 强制 sshd 只使用 IPv6 地址

-b bits
指定使用SSH-1协议时服务器密钥的长度,默认为768

-D 将 sshd 作为前台进程运行,而不是脱离控制台成为后台守护进程。主要用于调试。

-d 以调试模式运行。服务器将在前台运行并发送非常详细的调试日志信息,
服务器将只允许接入一个连接,并且不派生出子进程。仅用于调试目的。
使用多个 -d 选项可以输出更详细的调试信息(最多3个)。

-e 将服务器日志消息发送到 stderr 而不是系统日志。

-f config_file
指定配置文件的绝对路径,默认值通常是 /etc/ssh/sshd_config 。
如果配置文件不存在 sshd 将无法启动。

-g login_grace_time
要求客户端必须在这个指定的秒数内完成认证,默认为 120 秒。
如果在指定时间内未完成认证,服务器将断开连接并退出子进程。
设为零表示没有限制。

-h host_key_file
指定使用哪一个主机密钥文件。
因为主机密钥一般只有root可以读取,所以在服务器以非root运行时通常必须设置此选项。
对于SSH-1协议,默认值一般是:/etc/ssh/ssh_host_key
对于SSH-2协议,默认值一般是:/etc/ssh/ssh_host_rsa_key 和 /etc/ssh/ssh_host_dsa_key

-i 告诉 sshd 它是由 inetd 启动的。
由于 sshd 在能够应答客户端之前可能需要数十秒来生成服务器密钥,所以一般不使用 inetd 来启动。
如果每一次都生成新密钥,那么客户端每次都要等候很久。
当然,如果密钥很短,比如只有512位,那么使用 inetd 也是可行的。

-k key_gen_time
指定运行于SSH-1协议时重新生成密钥的周期秒数,默认为3600秒。零表示永不重新生成。
需要不停的重新生成密钥的原因在于SSH-1协议并未将密钥持久保存在某个地方。
不断的重新生成密钥也可以降低窃听或主机被入侵等攻击造成的损害。

-o option
按照配置文件的格式("指令 值")在命令行上指定某些配置指令的值。
可以通过多次使用此选项指定多个指令的值。
有关更多配置指令的解释请查看 sshd_config(5) 手册页。

-p port
指定监听端口(默认为22),可以多次使用此选项监听多个端口。
如果在命令行上使用了此选项,那么配置文件中的 Port 指令将被忽略。
但是配置文件中的 ListenAddress 指令又会覆盖这个命令行选项。

-q 安静模式。不发送任何日志信息。默认情况下每个连接的启动、认证、结束都将被记录。

-t 测试模式。仅检查配置文件和密钥的有效性。常用于修改过配置文件之后检查其正确性。

-u len 指定utmp文件中远程主机名字段的最大字符数,如果远程主机名比这个长,那么将使用点分十进制ip地址。
这就允许名字非常长的主机名也能得到唯一标识。指定"-u0"则表示仅记录点分十进制ip地址。
"-u0"还能阻止 sshd 进行DNS反向查询,除非认证机制或配置文件要求必须进行DNS查询。
配置文件中的 RhostsRSAAuthentication, HostbasedAuthentication 指令会要求进行DNS反向查询,
密钥文件中使用 from="pattern-list" 选项也会要求进行DNS反向查询,
配置文件中的 AllowUsers 或 DenyUsers 指令中包含 USER@HOST 模式时也会要求进行DNS反向查询。

认证
OpenSSH 同时支持SSH-1和SSH-2协议,但是可以在配置文件中使用 Protocol 指令指定只支持其中一种或两种都支持。
SSH-2同时支持RSA和DSA密钥,但是SSH-1仅支持RSA密钥。
无论哪种协议,每个主机都有一个特定的密钥(默认2048位)用于标识自身。

对于SSH-1,服务器在启动的时候会生成一个额外的临时密钥(默认768位,不在硬盘保存),并且通常每小时重新生成一次。
当客户端发起连接的时候,守护进程使用它的主机公钥应答,客户端将此公钥与先前存储的公钥进行对比,看看是否有变化。
客户端接着生成一个256位的随机数,并用刚才获得的服务器公钥加密,然后将结果发回给服务器。
此后双方就使用这个256位的随机数(会话密钥)加密本次会话的所有内容。
具体的加密算法由客户端在服务器提供的所有可用算法中选择,默认为3DES算法。

对于SSH-2,则使用 Diffie-Hellman 密钥交换协议商定会话密钥。随后的会话将使用商定的密钥加密,
具体的加密算法由客户端在服务器提供的所有可用算法中选择(比如AES-256)。
此外,还使用由双方商定的摘要算法(hmac-md5, hmac-sha1, umac-64, hmac-ripemd160)对数据完整性进行校验。

接着,客户端将使用服务器认可的认证方法(基于主机的认证、公钥认证、质疑-应答认证、密码认证)之一进行身份认证。

认证成功后就进入了预备会话的状态,客户端可能会要求分配一个伪终端、X11转发、TCP转发、认证**转发等。

然后,客户端可能会要求取得一个shell或执行一个命令,双方进入会话模式,可以在任何时候发送任何数据。
这些数据将在服务器端的shell或命令与客户终端之间传递。

当会话结束时,服务器将向客户端发送会话终止信号,双方退出。

登录过程
当某个用户成功登录后,sshd 将会按照下列顺序做一系列动作:

1. 如果在一个 tty 登录,并且没有指定执行任何命令,那么将打印上次登录时间和 /etc/motd 的内容。
/etc/motd 的内容可以通过配置文件或者 ~/.hushlogin 禁止,具体参见下面的"文件"小节。

2. 如果在一个 tty 登录,那么记录登录时间。

3. 如果存在 /etc/nologin 文件,并且登录用户不是root,那么打印 /etc/nologin 文件的内容并结束。

4. 切换身份至非特权用户运行

5. 设置基本环境变量

6. 如果配置文件允许用户修改环境变量,则处理 ~/.ssh/environment 文件并设置相应的环境变量
细节参见 sshd_config(5) 手册页中的 PermitUserEnvironment 指令。

7. 切换到该用户的家目录

8. 如果存在 ~/.ssh/rc 文件则运行它,否则运行 /etc/ssh/sshrc (如果存在)。
如果上面两个都不存在则运行 xauth 程序。参见下面的"SSHRC"小节。

9. 启动用户的 shell 或运行指定的命令。

SSHRC
如果存在 ~/.ssh/rc 文件,那么在读取并设置环境变量之后、运行用户shell或命令之前,将会使用sh运行这个文件。
这个文件不能在 stdout 上产生任何输出,而只能在 stderr 上产生输出。
如果使用 X11 转发,那么此脚本将从标准输入上收到"proto cookie"对(包含 DISPLAY 环境变量)。
该脚本必须调用 xauth ,因为 sshd 不会自动运行 xauth 来添加 X11 cookies

这个文件的主要目的是在访问用户的家目录之前进行一些必要的初始化工作,比如在使用 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 文件;
如果 /etc/ssh/sshrc 文件也不存在,那么将使用 xauth 添加 cookie

AUTHORIZED_KEYS 文件格式
AuthorizedKeysFile 指令指定了用于公钥认证的公钥文件(默认 ~/.ssh/authorized_keys)位置,每行一个公钥。
此文件中空行和以'#'开头的行将被当作注释忽略。

SSH-1公钥文件由以下字段组成:选项,位数,exponent(指数),modulus(模数),注释。
SSH-2公钥文件由以下字段组成:选项,公钥类型,base64编码后的公钥,注释。

"选项"字段是可选的,取决于该行是否由数字开头("选项"字段不可能由数字开头)。
"公钥类型"字段的值可以是"ssh-dss"和"ssh-rsa"之一。

这个文件中允许的最大DSA密钥长度是8192,允许的最大RSA密钥长度是16384位。sshd 强制RSA密钥的最小长度是768位。
你不需要手工输入这么长的字符串,正确的做法是从 identity.pub, id_dsa.pub或id_rsa.pub 文件中复制。

"选项"字段由逗号分隔的选项组成,不允许出现任何空格(除非出现在双引号内)。
当前所有可用的选项及其解释如下:

command="command"
指定当这个公钥用于认证时需要额外运行的命令(必须使用引号界定),如果要在命令中含有引号可以通过反斜杠转义。
使用这个选项后,由用户提供的命令将被忽略。
如果客户端请求一个pty,那么这个命令将会在pty上运行,否则将以无终端方式运行。
如果必须使用8-bit clean(清除字节最高位)通道,那么就不能请求pty或者只能以无终端方式运行。
这个选项常用来让某个特定的公钥执行特定的任务。比如仅仅将某一个公钥用于执行备份任务。
需要注意的是,客户端可以指定TCP和/或X11转发,除非它们已经被明确禁止了。
这个命令最初是由客户端的 SSH_ORIGINAL_COMMAND 环境变量支持的。
这个选项可以用于在 shell/命令/子系统 中执行。

environment="NAME=value"
指定当使用这个公钥登录时,将 NAME 环境变量的值设为 value 。用这种方式设置的环境变量将会覆盖默认的环境变量。
可以多次使用这个选项指定多个环境变量。
默认禁止处理环境变量,不过可以通过 PermitUserEnvironment 配置指令进行更改。
如果启用了 UseLogin ,那么这个选项将被自动禁止。

from="pattern-list"
指定在公钥认证之外,远程主机的规范名称还必须被列在"pattern-list"里面。pattern-list 是逗号分隔的主机名列表。
这个选项的目的主要是为了增加安全性。
参见ssh_config(5)手册页"模式"小节获取更多模式信息。

no-agent-forwarding
当这个公钥用于认证的时候,禁止使用认证**转发。

no-port-forwarding
当这个公钥用于认证的时候,禁止使用TCP转发。任何客户端的端口转发请求都会被拒绝。
比如在使用 command 选项的时候,就很可能同时需要使用这个选项。

no-pty 禁止分配终端(客户端要求分配终端的请求将会失败)。

no-X11-forwarding
当这个公钥用于认证的时候,禁止使用X11转发(客户端要求X11转发的请求将会失败)。

permitopen="hostort"
限制本地"ssh -L"端口转发,这样就只能连接到特定的主机和端口。
IPv6 地址也可以通过"host/port"这个特别的语法进行指定。
可以使用多个 permitopen 选项。
不允许在指定主机名时使用模式匹配,它们必须是精确的域名或ip地址。

tunnel="n"
在服务器上强制指定一个 tun(4) 设备。
没有这个选项的话,当客户端请求一个通道的时候,将会使用下一个可用的设备。

一个 authorized_keys 文件示范:

# 这是注释
ssh-rsa AAAAB3Nza...LiPk== [email protected]
from="*.sales.example.net,!pc.sales.example.net" ssh-rsa AAAAB2...19Q== [email protected]
command="dump /home",no-pty,no-port-forwarding ssh-dss AAAAC3...51R== example.net
permitopen="192.0.2.1:80",permitopen="192.0.2.2:25" ssh-dss AAAAB5...21S==
tunnel="0",command="sh /etc/netstart tun0" ssh-rsa AAAAE6...6DR== [email protected]

SSH_KNOWN_HOSTS 文件格式
/etc/ssh/ssh_known_hosts 和 ~/.ssh/known_hosts 文件包含所有已知的主机公钥,每行一个公钥。
全局文件应当由系统管理员维护,每个用户的文件则是自动维护的:
当用户从一个未知主机连接成功,这个未知主机的公钥将被自动添加到 ~/.ssh/known_hosts 文件中。

这个文件中的字段格式可以有两种,分别对应SSH-1和SSH-2两种协议。
SSH-1:主机名,位数,exponent,modulus,注释
SSH-2:主机名,公钥类型,base64编码后的公钥,注释。
这些字段之间使用空白符分隔。而以'#'开头的行和空白行都会被当作注释忽略。

"主机名"字段是一个逗号分隔的模式列表('*'和'?'可以用作通配符)。
当对客户端进行认证的时候,将使用客户端的规范化主机名按次序对每个模式进行匹配;
当对服务器进行认证的时候,将使用用户提供的名称按次序对每个模式进行匹配。
每个模式前都可以加上'!'表示否定:如果某个主机名匹配一个否定模式,那么即使它能够匹配其后的其它模式也会被拒绝。
主机名或地址还可以使用'['和']'进行界定,并在其后跟随一个':'和一个非标准的端口号。

"主机名"字段的内容还可以使用散列值存储,以便于隐藏真实的主机名或地址,以增强安全性。
使用'|'字符开头就表示主机名已经经过散列计算。
每一行最多只允许出现一个经过散列的主机名,并且不允许对散列值使用前面提到过的通配符(*,?)或否定匹配(!)。

"位数,exponent,modulus"或"公钥类型,base64编码后的公钥"直接取自RSA主机密钥,
比如从 /etc/ssh/ssh_host_key.pub 中直接复制。
可选的"注释"字段并没有什么实际用途,仅仅是为了帮助说明此公钥的相关信息。

在进行主机认证时,只要有一行匹配就可以通过认证。
这样同一个主机拥有多个公钥,或者拥有多个主机名(长名、短名)。
但这个特性也可能会导致该文件中包含相互冲突的信息,而只要有一行匹配就可以通过认证。

文件中的每一行都很长,你最好直接从 /etc/ssh/ssh_host_key.pub 文件中复制,然后在前面加上主机名。

下面是一个 ssh_known_hosts 文件的示例:

# 这是注释
closenet,...,192.0.2.53 1024 37 159...93 closenet.example.net
cvs.example.net,192.0.2.10 ssh-rsa AAAA1234.....=
# 下面是一个经过散列的主机名
|1|JfKTdBh7rNbXkVAQCRp4OQoPfmI=|USECr3SWf1JUPsms5AqfD5QfxkM= ssh-rsa AAAA1234.....=

文件
~/.hushlogin
就算 PrintLastLog 和 PrintMotd 配置指令被开启,
但是如果这个文件存在,那么也不会打印上次登录时间和 /etc/motd 文件的内容。
不过它不会阻止打印 Banner 指令要求显示的内容。

~/.rhosts
这个文件用于基于主机的认证(参见 ssh(1) 以获取更多信息),里面列出允许登录的主机/用户对。
在某些情况下这个文件可能需要被全局可读,比如用户的家目录位于一个NFS分区上的时候。
这个文件的属主必须是这个对应的用户,且不能允许其它用户写入。
大多数情况下推荐的权限是"600"。

~/.shosts
这个文件的用法与 .rhosts 完全一样,只是在允许做基于主机的认证同时防止 rlogin/rsh 登录。

~/.ssh/authorized_keys
存放该用户可以用来登录的 RSA/DSA 公钥。这个文件的格式上面已经描述过了。
这个文件的内容并不需要十分的保密,但是推荐的权限仍然是"600"。
如果这个文件、或者其所在目录(~/.ssh)、或者用户的家目录,可以被其他用户写入,
那么这个文件就可能会被其它未认证用户改写。
如果权限不对,sshd 默认将不允许使用这个文件进行认证,除非 StrictModes 指令被设为 no 。
可以通过下面的命令设置合格的权限:chmod go-w ~/ ~/.ssh ~/.ssh/authorized_keys

~/.ssh/environment
这个文件(如果存在)含有在登录时附加定义的环境变量。这个文件的格式很简单:
空白行和'#'开头的行被忽略,有效行的按照"name=value"的格式每行定义一个变量。
这个文件的权限也应当是"600"。
默认是禁止使用这个文件处理环境变量的,但是可以通过 PermitUserEnvironment 配置指令开启。

~/.ssh/known_hosts
包含没有在 /etc/ssh/ssh_known_hosts 中列出的、该用户登录过的主机的公钥。
这个文件的格式参见前面的内容。这个文件正确的权限应当是"600"。

~/.ssh/rc
在读取并设置环境变量之后、运行用户shell或命令之前,所要执行的初始化动作。
这个文件正确的权限应当是"600"。

/etc/hosts.allow
/etc/hosts.deny
tcp-wrappers 用于根据源地址执行访问控制,这是其配置文件。更多细节参见 hosts_access(5) 手册页。

/etc/hosts.equiv
用于基于主机的认证(参见 ssh(1))。它应当只允许root写入。

/etc/ssh/moduli
包含用于"Diffie-Hellman Group Exchange"的 Diffie-Hellman groups 。
此文件的格式在 moduli(5) 手册页描述。

/etc/motd
"motd"的意思是"message of the day"(今日消息)。常用于广播系统范围的重要事件。
一般在登录系统后、执行登录shell前,由 login 显示其中的内容。
但如果登录用户的家目录下有 .hushlogin 文件则不显示。

/etc/nologin
如果存在这个文件,sshd 将拒绝任何非root用户的登录,并向被拒绝的用户显示此文件的内容。
此文件必须确保全局可读。

/etc/shosts.equiv
这个文件的用法与 hosts.equiv 完全相同,不同仅在于不允许使用 rsh/rlogin 。

/etc/ssh/ssh_host_key
/etc/ssh/ssh_host_dsa_key
/etc/ssh/ssh_host_rsa_key
这三个文件包含了主机私钥,其属主必须是root,权限应该是"600"。
如果权限不对,sshd 根本就会拒绝启动。

/etc/ssh/ssh_host_key.pub
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_rsa_key.pub
这三个文件包含了主机公钥,其属主必须是root,权限应该是"644"。
这些文件中包含的内容必须与相应的私钥文件匹配。
这些文件事实上并没有被使用,只是为了用户方便才提供这些文件的。
比如,将公钥添加到 ~/.ssh/authorized_keys 和 /etc/ssh/ssh_known_hosts 文件中。
这些文件是使用 ssh-keygen(1) 创建的。

/etc/ssh/ssh_known_hosts
全局范围的已知主机公钥列表。系统管理员应该把所需主机公钥保存在这个文件中。
这个文件的格式上文已经有了详细介绍。这个文件的属主应当是root,权限应当是"644"。

/etc/ssh/sshd_config
sshd 的全局配置文件。文件格式和可用的配置指令在 sshd_config(5) 手册页介绍。

/etc/ssh/sshrc
类似于 ~/.ssh/rc ,但是针对全局有效。这个文件的属主应当是root,权限应当是"644"。

/var/empty
sshd 在预认证阶段进行特权分离时,将要切换到的虚根目录。
此目录当中不能包含任何文件,并且其属主应当是root,权限应当是"000"。

/var/run/sshd.pid
存储着 sshd 主监听进程的进程号。
如果有多个在不同端口监听的主进程,那么这个文件只包含最后一个启动的监听进程的进程号。
这个文件的内容并不很重要,可以设为全局可读。

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

作者
OpenSSH is a derivative of the original and free ssh 1.2.12 release by
Tatu Ylonen. Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo
de Raadt and Dug Song removed many bugs, re-added newer features and cre-
ated OpenSSH. Markus Friedl contributed the support for SSH protocol
versions 1.5 and 2.0. Niels Provos and Markus Friedl contributed support
for privilege separation.

警告
System security is not improved unless rshd, rlogind, and rexecd are dis-
abled (thus completely disabling rlogin and rsh into the machine).

OpenBSD 4.2 June 7, 2007 9

-------------------------------------------------------------
SSHD_CONFIG(5) OpenBSD Programmer's Manual SSHD_CONFIG(5)

名称
sshd_config - OpenSSH SSH 服务器守护进程配置文件

大纲
/etc/ssh/sshd_config

描述
sshd(8) 默认从 /etc/ssh/sshd_config 文件(或通过 -f 命令行选项指定的文件)读取配置信息。
配置文件是由"指令 值"对组成的,每行一个。空行和以'#'开头的行都将被忽略。
如果值中含有空白符或者其他特殊符号,那么可以通过在两边加上双引号(")进行界定。
[注意]值是大小写敏感的,但指令是大小写无关的。

当前所有可以使用的配置指令如下:

AcceptEnv
指定客户端发送的哪些环境变量将会被传递到会话环境中。[注意]只有SSH-2协议支持环境变量的传递。
细节可以参考 ssh_config(5) 中的 SendEnv 配置指令。
指令的值是空格分隔的变量名列表(其中可以使用'*'和'?'作为通配符)。也可以使用多个 AcceptEnv 达到同样的目的。
需要注意的是,有些环境变量可能会被用于绕过禁止用户使用的环境变量。由于这个原因,该指令应当小心使用。
默认是不传递任何环境变量。

AddressFamily
指定 sshd(8) 应当使用哪种地址族。取值范围是:"any"(默认)、"inet"(仅IPv4)、"inet6"(仅IPv6)。

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

AllowTcpForwarding
是否允许TCP转发,默认值为"yes"。
禁止TCP转发并不能增强安全性,除非禁止了用户对shell的访问,因为用户可以安装他们自己的转发器。

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

AuthorizedKeysFile
存放该用户可以用来登录的 RSA/DSA 公钥。
该指令中可以使用下列根据连接时的实际情况进行展开的符号:
%% 表示'%'、%h 表示用户的主目录、%u 表示该用户的用户名。
经过扩展之后的值必须要么是绝对路径,要么是相对于用户主目录的相对路径。
默认值是".ssh/authorized_keys"。

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

ChallengeResponseAuthentication
是否允许质疑-应答(challenge-response)认证。默认值是"yes"。
所有 login.conf(5) 中允许的认证方式都被支持。

Ciphers
指定SSH-2允许使用的加密算法。多个算法之间使用逗号分隔。可以使用的算法如下:
"aes128-cbc", "aes192-cbc", "aes256-cbc", "aes128-ctr", "aes192-ctr", "aes256-ctr",
"3des-cbc", "arcfour128", "arcfour256", "arcfour", "blowfish-cbc", "cast128-cbc"
默认值是可以使用上述所有算法。

ClientAliveCountMax
sshd(8) 在未收到任何客户端回应前最多允许发送多少个"alive"消息。默认值是 3 。
到达这个上限后,sshd(8) 将强制断开连接、关闭会话。
需要注意的是,"alive"消息与 TCPKeepAlive 有很大差异。
"alive"消息是通过加密连接发送的,因此不会被欺骗;而 TCPKeepAlive 却是可以被欺骗的。
如果 ClientAliveInterval 被设为 15 并且将 ClientAliveCountMax 保持为默认值,
那么无应答的客户端大约会在45秒后被强制断开。这个指令仅可以用于SSH-2协议。

ClientAliveInterval
设置一个以秒记的时长,如果超过这么长时间没有收到客户端的任何数据,
sshd(8) 将通过安全通道向客户端发送一个"alive"消息,并等候应答。
默认值 0 表示不发送"alive"消息。这个选项仅对SSH-2有效。

Compression
是否对通信数据进行加密,还是延迟到认证成功之后再对通信数据加密。
可用值:"yes", "delayed"(默认), "no"。

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 环境变量来支持的。

GatewayPorts
是否允许远程主机连接本地的转发端口。默认值是"no"。
sshd(8) 默认将远程端口转发绑定到loopback地址。这样将阻止其它远程主机连接到转发端口。
GatewayPorts 指令可以让 sshd 将远程端口转发绑定到非loopback地址,这样就可以允许远程主机连接了。
"no"表示仅允许本地连接,"yes"表示强制将远程端口转发绑定到统配地址(wildcard address),
"clientspecified"表示允许客户端选择将远程端口转发绑定到哪个地址。

GSSAPIAuthentication
是否允许使用基于 GSSAPI 的用户认证。默认值为"no"。仅用于SSH-2。

GSSAPICleanupCredentials
是否在用户退出登录后自动销毁用户凭证缓存。默认值是"yes"。仅用于SSH-2。

HostbasedAuthentication
这个指令与 RhostsRSAAuthentication 类似,但是仅可以用于SSH-2。推荐使用默认值"no"。
推荐使用默认值"no"禁止这种不安全的认证方式。

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

HostKey
主机私钥文件的位置。如果权限不对,sshd(8) 可能会拒绝启动。
SSH-1默认是 /etc/ssh/ssh_host_key 。
SSH-2默认是 /etc/ssh/ssh_host_rsa_key 和 /etc/ssh/ssh_host_dsa_key 。
一台主机可以拥有多个不同的私钥。"rsa1"仅用于SSH-1,"dsa"和"rsa"仅用于SSH-2。

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

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

KerberosAuthentication
是否要求用户为 PasswordAuthentication 提供的密码必须通过 Kerberos KDC 认证,也就是是否使用Kerberos认证。
要使用Kerberos认证,服务器需要一个可以校验 KDC identity 的 Kerberos servtab 。默认值是"no"。

KerberosGetAFSToken
如果使用了 AFS 并且该用户有一个 Kerberos 5 TGT,那么开启该指令后,
将会在访问用户的家目录前尝试获取一个 AFS token 。默认为"no"。

KerberosOrLocalPasswd
如果 Kerberos 密码认证失败,那么该密码还将要通过其它的认证机制(比如 /etc/passwd)。
默认值为"yes"。

KerberosTicketCleanup
是否在用户退出登录后自动销毁用户的 ticket 。默认值是"yes"。

KeyRegenerationInterval
在SSH-1协议下,短命的服务器密钥将以此指令设置的时间为周期(秒),不断重新生成。
这个机制可以尽量减小密钥丢失或者黑客攻击造成的损失。
设为 0 表示永不重新生成,默认为 3600(秒)。

ListenAddress
指定 sshd(8) 监听的网络地址,默认监听所有地址。可以使用下面的格式:

ListenAddress host|IPv4_addr|IPv6_addr
ListenAddress host|IPv4_addrort
ListenAddress [host|IPv6_addr]ort

如果未指定 port ,那么将使用 Port 指令的值。
可以使用多个 ListenAddress 指令监听多个地址。

LoginGraceTime
限制用户必须在指定的时限内认证成功,0 表示无限制。默认值是 120 秒。

LogLevel
指定 sshd(8) 的日志等级(详细程度)。可用值如下:
QUIET, FATAL, ERROR, INFO(默认), VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3
DEBUG 与 DEBUG1 等价;DEBUG2 和 DEBUG3 则分别指定了更详细、更罗嗦的日志输出。
比 DEBUG 更详细的日志可能会泄漏用户的敏感信息,因此反对使用。

MACs
指定允许在SSH-2中使用哪些消息摘要算法来进行数据校验。
可以使用逗号分隔的列表来指定允许使用多个算法。默认值(包含所有可以使用的算法)是:
hmac-md5,hmac-sha1,[email protected],hmac-ripemd160,hmac-sha1-96,hmac-md5-96

Match
引入一个条件块。块的结尾标志是另一个 Match 指令或者文件结尾。
如果 Match 行上指定的条件都满足,那么随后的指令将覆盖全局配置中的指令。
Match 的值是一个或多个"条件-模式"对。可用的"条件"是:User, Group, Host, Address 。
只有下列指令可以在 Match 块中使用:AllowTcpForwarding, Banner,
ForceCommand, GatewayPorts, GSSApiAuthentication,
KbdInteractiveAuthentication, KerberosAuthentication,
PasswordAuthentication, PermitOpen, PermitRootLogin,
RhostsRSAAuthentication, RSAAuthentication, X11DisplayOffset,
X11Forwarding, X11UseLocalHost

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

MaxStartups
最大允许保持多少个未认证的连接。默认值是 10 。
到达限制后,将不再接受新连接,除非先前的连接认证成功或超出 LoginGraceTime 的限制。

PasswordAuthentication
是否允许使用基于密码的认证。默认为"yes"。

PermitEmptyPasswords
是否允许密码为空的用户远程登录。默认为"no"。

PermitOpen
指定TCP端口转发允许的目的地,可以使用空格分隔多个转发目标。默认允许所有转发请求。
合法的指令格式如下:
PermitOpen hostort
PermitOpen IPv4_addrort
PermitOpen [IPv6_addr]ort
"any"可以用于移除所有限制并允许一切转发请求。

PermitRootLogin
是否允许 root 登录。可用值如下:
"yes"(默认) 表示允许。"no"表示禁止。
"without-password"表示禁止使用密码认证登录。
"forced-commands-only"表示只有在指定了 command 选项的情况下才允许使用公钥认证登录。
同时其它认证方法全部被禁止。这个值常用于做远程备份之类的事情。

PermitTunnel
是否允许 tun(4) 设备转发。可用值如下:
"yes", "point-to-point"(layer 3), "ethernet"(layer 2), "no"(默认)。
"yes"同时蕴含着"point-to-point"和"ethernet"。

PermitUserEnvironment
指定是否允许 sshd(8) 处理 ~/.ssh/environment 以及 ~/.ssh/authorized_keys 中的 environment= 选项。
默认值是"no"。如果设为"yes"可能会导致用户有机会使用某些机制(比如 LD_PRELOAD)绕过访问控制,造成安全漏洞。

PidFile
指定在哪个文件中存放SSH守护进程的进程号,默认为 /var/run/sshd.pid 文件。

Port
指定 sshd(8) 守护进程监听的端口号,默认为 22 。可以使用多条指令监听多个端口。
默认将在本机的所有网络接口上监听,但是可以通过 ListenAddress 指定只在某个特定的接口上监听。

PrintLastLog
指定 sshd(8) 是否在每一次交互式登录时打印最后一位用户的登录时间。默认值是"yes"。

PrintMotd
指定 sshd(8) 是否在每一次交互式登录时打印 /etc/motd 文件的内容。默认值是"yes"。

Protocol
指定 sshd(8) 支持的SSH协议的版本号。
'1'和'2'表示仅仅支持SSH-1和SSH-2协议。"2,1"表示同时支持SSH-1和SSH-2协议。

PubkeyAuthentication
是否允许公钥认证。仅可以用于SSH-2。默认值为"yes"。

RhostsRSAAuthentication
是否使用强可信主机认证(通过检查远程主机名和关联的用户名进行认证)。仅用于SSH-1。
这是通过在RSA认证成功后再检查 ~/.rhosts 或 /etc/hosts.equiv 进行认证的。
出于安全考虑,建议使用默认值"no"。

RSAAuthentication
是否允许使用纯 RSA 公钥认证。仅用于SSH-1。默认值是"yes"。

ServerKeyBits
指定临时服务器密钥的长度。仅用于SSH-1。默认值是 768(位)。最小值是 512 。

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

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

SyslogFacility
指定 sshd(8) 将日志消息通过哪个日志子系统(facility)发送。有效值是:
DAEMON, USER, AUTH(默认), LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7

TCPKeepAlive
指定系统是否向客户端发送 TCP keepalive 消息。默认值是"yes"。
这种消息可以检测到死连接、连接不当关闭、客户端崩溃等异常。
可以设为"no"关闭这个特性。

UseDNS
指定 sshd(8) 是否应该对远程主机名进行反向解析,以检查此主机名是否与其IP地址真实对应。默认值为"yes"。

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

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

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

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

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

XAuthLocation
指定 xauth(1) 程序的绝对路径。默认值是 /usr/X11R6/bin/xauth


时间格式
在 sshd(8) 命令行参数和配置文件中使用的时间值可以通过下面的格式指定:time[qualifier] 。
其中的 time 是一个正整数,而 qualifier 可以是下列单位之一:
<无> 秒
s | S 秒
m | M 分钟
h | H 小时
d | D 天
w | W 星期

可以通过指定多个数值来累加时间,比如:
1h30m 1 小时 30 分钟 (90 分钟)


文件
/etc/ssh/sshd_config
sshd(8) 的主配置文件。这个文件的宿主应当是root,权限最大可以是"644"。

参见
sshd(8)

作者
OpenSSH is a derivative of the original and free ssh 1.2.12 release by
Tatu Ylonen. Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo
de Raadt and Dug Song removed many bugs, re-added newer features and cre-
ated OpenSSH. Markus Friedl contributed the support for SSH protocol
versions 1.5 and 2.0. Niels Provos and Markus Friedl contributed support
for privilege separation.

OpenBSD 4.2 January 1, 2008 9
-------------------------------------------------------------
SSH-KEYGEN(1) OpenBSD Reference Manual SSH-KEYGEN(1)

名称
ssh-keygen - 生成、管理和转换认证密钥


语法
ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment] [-f output_keyfile]
ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
ssh-keygen -i [-f input_keyfile]
ssh-keygen -e [-f input_keyfile]
ssh-keygen -y [-f input_keyfile]
ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
ssh-keygen -l [-f input_keyfile]
ssh-keygen -B [-f input_keyfile]
ssh-keygen -D reader
ssh-keygen -F hostname [-f known_hosts_file]
ssh-keygen -H [-f known_hosts_file]
ssh-keygen -R hostname [-f known_hosts_file]
ssh-keygen -U reader [-f input_keyfile]
ssh-keygen -r hostname [-f input_keyfile] [-g]
ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point]
ssh-keygen -T output_file -f input_file [-v] [-a num_trials] [-W generator]


描述
ssh-keygen 用于为 ssh(1)生成、管理和转换认证密钥,包括 RSA 和 DSA 两种密钥。
密钥类型可以用 -t 选项指定。如果没有指定则默认生成用于SSH-2的RSA密钥。

ssh-keygen 还可以用来产生 Diffie-Hellman group exchange (DH-GEX) 中使用的素数模数。
参见模数和生成小节。

一般说来,如果用户希望使用RSA或DSA认证,那么至少应该运行一次这个程序,
在 ~/.ssh/identity, ~/.ssh/id_dsa 或 ~/.ssh/id_rsa 文件中创建认证所需的密钥。
另外,系统管理员还可以用它产生主机密钥。

通常,这个程序产生一个密钥对,并要求指定一个文件存放私钥,同时将公钥存放在附加了".pub"后缀的同名文件中。
程序同时要求输入一个密语字符串(passphrase),空表示没有密语(主机密钥的密语必须为空)。
密语和口令(password)非常相似,但是密语可以是一句话,里面有单词、标点符号、数字、空格或任何你想要的字符。
好的密语要30个以上的字符,难以猜出,由大小写字母、数字、非字母混合组成。密语可以用 -p 选项修改。

丢失的密语不可恢复。如果丢失或忘记了密语,用户必须产生新的密钥,然后把相应的公钥分发到其他机器上去。

RSA1的密钥文件中有一个"注释"字段,可以方便用户标识这个密钥,指出密钥的用途或其他有用的信息。
创建密钥的时候,注释域初始化为"user@host",以后可以用 -c 选项修改。

密钥产生后,下面的命令描述了怎样处置和激活密钥。可用的选项有:

-a trials
在使用 -T 对 DH-GEX 候选素数进行安全筛选时需要执行的基本测试数量。

-B 显示指定的公钥/私钥文件的 bubblebabble 摘要。

-b bits
指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。DSA密钥必须恰好是1024位(FIPS 186-2 标准的要求)。

-C comment
提供一个新注释

-c 要求修改私钥和公钥文件中的注释。本选项只支持 RSA1 密钥。
程序将提示输入私钥文件名、密语(如果存在)、新注释。

-D reader
下载存储在智能卡 reader 里的 RSA 公钥。

-e 读取OpenSSH的私钥或公钥文件,并以 RFC 4716 SSH 公钥文件格式在 stdout 上显示出来。
该选项能够为多种商业版本的 SSH 输出密钥。

-F hostname
在 known_hosts 文件中搜索指定的 hostname ,并列出所有的匹配项。
这个选项主要用于查找散列过的主机名/ip地址,还可以和 -H 选项联用打印找到的公钥的散列值。

-f filename
指定密钥文件名。

-G output_file
为 DH-GEX 产生候选素数。这些素数必须在使用之前使用 -T 选项进行安全筛选。

-g 在使用 -r 打印指纹资源记录的时候使用通用的 DNS 格式。

-H 对 known_hosts 文件进行散列计算。这将把文件中的所有主机名/ip地址替换为相应的散列值。
原来文件的内容将会添加一个".old"后缀后保存。这些散列值只能被 ssh 和 sshd 使用。
这个选项不会修改已经经过散列的主机名/ip地址,因此可以在部分公钥已经散列过的文件上安全使用。

-i 读取未加密的SSH-2兼容的私钥/公钥文件,然后在 stdout 显示OpenSSH兼容的私钥/公钥。
该选项主要用于从多种商业版本的SSH中导入密钥。

-l 显示公钥文件的指纹数据。它也支持 RSA1 的私钥。
对于RSA和DSA密钥,将会寻找对应的公钥文件,然后显示其指纹数据。

-M memory
指定在生成 DH-GEXS 候选素数的时候最大内存用量(MB)。

-N new_passphrase
提供一个新的密语。

-P passphrase
提供(旧)密语。

-p 要求改变某私钥文件的密语而不重建私钥。程序将提示输入私钥文件名、原来的密语、以及两次输入新密语。

-q 安静模式。用于在 /etc/rc 中创建新密钥的时候。

-R hostname
从 known_hosts 文件中删除所有属于 hostname 的密钥。
这个选项主要用于删除经过散列的主机(参见 -H 选项)的密钥。

-r hostname
打印名为 hostname 的公钥文件的 SSHFP 指纹资源记录。

-S start
指定在生成 DH-GEX 候选模数时的起始点(16进制)。

-T output_file
测试 Diffie-Hellman group exchange 候选素数(由 -G 选项生成)的安全性。

-t type
指定要创建的密钥类型。可以使用:"rsa1"(SSH-1) "rsa"(SSH-2) "dsa"(SSH-2)

-U reader
把现存的RSA私钥上传到智能卡 reader

-v 详细模式。ssh-keygen 将会输出处理过程的详细调试信息。常用于调试模数的产生过程。
重复使用多个 -v 选项将会增加信息的详细程度(最大3次)。

-W generator
指定在为 DH-GEX 测试候选模数时想要使用的 generator

-y 读取OpenSSH专有格式的公钥文件,并将OpenSSH公钥显示在 stdout 上。


模数生成
ssh-keygen 可以生成用于 Diffie-Hellman Group Exchange (DH-GEX) 协议的 groups 。
生成过程分为两步:
首先,使用一个快速且消耗内存较多的方法生成一些候选素数。然后,对这些素数进行适应性测试(消耗CPU较多)。

可以使用 -G 选项生成候选素数,同时使用 -b 选项制定其位数。例如:

# ssh-keygen -G moduli-2048.candidates -b 2048

默认将从指定位数范围内的一个随机点开始搜索素数,不过可以使用 -S 选项来指定这个随机点(16进制)。

生成一组候选数之后,接下来就需要使用 -T 选项进行适应性测试。
此时 ssh-keygen 将会从 stdin 读取候选素数(或者通过 -f 选项读取一个文件),例如:

# ssh-keygen -T moduli-2048 -f moduli-2048.candidates

每个候选素数默认都要通过 100 个基本测试(可以通过 -a 选项修改)。
DH generator 的值会自动选择,但是你也可以通过 -W 选项强制指定。有效的值可以是: 2, 3, 5

经过筛选之后的 DH groups 就可以存放到 /etc/ssh/moduli 里面了。
很重要的一点是这个文件必须包括不同长度范围的模数,而且通信双方双方共享相同的模数。


文件
~/.ssh/identity
该用户默认的 RSA1 身份认证私钥(SSH-1)。此文件的权限应当至少限制为"600"。
生成密钥的时候可以指定采用密语来加密该私钥(3DES)。
ssh(1) 将在登录的时候读取这个文件。

~/.ssh/identity.pub
该用户默认的 RSA1 身份认证公钥(SSH-1)。此文件无需保密。
此文件的内容应该添加到所有 RSA1 目标主机的 ~/.ssh/authorized_keys 文件中。

~/.ssh/id_dsa
该用户默认的 DSA 身份认证私钥(SSH-2)。此文件的权限应当至少限制为"600"。
生成密钥的时候可以指定采用密语来加密该私钥(3DES)。
ssh(1) 将在登录的时候读取这个文件。

~/.ssh/id_dsa.pub
该用户默认的 DSA 身份认证公钥(SSH-2)。此文件无需保密。
此文件的内容应该添加到所有 DSA 目标主机的 ~/.ssh/authorized_keys 文件中。

~/.ssh/id_rsa
该用户默认的 RSA 身份认证私钥(SSH-2)。此文件的权限应当至少限制为"600"。
生成密钥的时候可以指定采用密语来加密该私钥(3DES)。
ssh(1) 将在登录的时候读取这个文件。

~/.ssh/id_rsa.pub
该用户默认的 RSA 身份认证公钥(SSH-2)。此文件无需保密。
此文件的内容应该添加到所有 RSA 目标主机的 ~/.ssh/authorized_keys 文件中。

/etc/ssh/moduli
包含用于 DH-GEX 的 Diffie-Hellman groups 。文件的格式在 moduli(5) 手册页中描述。


参见
ssh(1), ssh-add(1), ssh-agent(1), moduli(5), sshd(8)

The Secure Shell (SSH) Public Key File Format, RFC 4716, 2006.


作者
OpenSSH is a derivative of the original and free ssh 1.2.12 release by
Tatu Ylonen. Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo
de Raadt and Dug Song removed many bugs, re-added newer features and
created OpenSSH. Markus Friedl contributed the support for SSH protocol
versions 1.5 and 2.0.

OpenBSD 4.2 May 31, 2007 5

作者: csfrank   发布时间: 2008-03-03

这个很有用!

作者: 7dehao   发布时间: 2008-03-04