Linux / Unix命令:sshd

名称

sshd - OpenSSH SSH守护进程

概要

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

描述

sshd (SSH Daemon)是ssh(1)的守护程序 。 这些程序一起取代rlogin rsh ,并通过不安全的网络提供两台不可信主机之间的安全加密通信 。 这些程序旨在尽可能方便地安装和使用。

sshd是监听来自客户端的连接的守护进程。 它通常在从/ etc / rc启动时启动,它为每个传入连接分配一个新的守护程序。 分叉的守护进程处理密钥交换,加密,认证,命令执行和数据交换。 这个sshd的实现同时支持SSH协议版本1和2。

SSH协议版本1

每个主机都有一个用于识别主机的特定于主机的RSA密钥(通常为1024位)。 另外,当守护进程启动时,它会生成服务器RSA密钥(通常为768位)。 如果已经使用该密钥,则该密钥通常每小时重新生成一次,并且永远不会存储在磁盘上。

每当客户端连接守护进程响应其公共主机和服务器密钥。 客户端将RSA主机密钥与其自己的数据库进行比较,以验证它没有更改。 客户端然后生成一个256位随机数。 它使用主机密钥和服务器密钥对该随机数进行加密,并将加密号码发送给服务器。 双方然后使用此随机数作为会话密钥,用于加密会话中的所有进一步通信。 会话的其余部分使用传统密码进行加密,目前是Blowfish或3DES,默认情况下使用3DES。 客户端选择使用服务器提供的加密算法

接下来,服务器和客户端进入认证对话框。 客户端尝试使用.rhosts身份验证,.rhosts身份验证和RSA主机身份验证,RSA质询 - 响应身份验证或基于密码的身份验证进行身份验证

Rhosts身份验证通常被禁用,因为它基本上不安全,但可以根据需要在服务器配置文件中启用。 除非禁用rshd rlogind和rexecd(因此完全禁用rlogin和rsh进入机器),否则系统安全性不会提高。

SSH协议版本2

版本2的工作原理类似:每台主机都有一个用于识别主机的主机特定密钥(RSA或DSA)。 但是,守护进程启动时,它不会生成服务器密钥。 通过Diffie-Hellman密钥协议提供前向安全性。 该密钥协议产生共享会话密钥。

会话的其余部分使用对称密码进行加密,该密码使用128位AES,Blowfish,3DES,CAST128,Arcfour,192位AES或256位AES。 客户端选择使用服务器提供的加密算法。 此外,会话完整性通过加密消息认证代码(hmac-sha1或hmac-md5)提供。

协议版本2提供基于公共密钥的用户(PubkeyAuthentication)或客户端主机(HostbasedAuthentication)认证方法,常规密码认证和基于挑战 - 响应的方法。

命令执行和数据转发

如果客户端自己成功进行身份验证,则会输入用于准备会话的对话框。 此时客户端可能会要求分配伪tty,转发X11连接,转发TCP / IP连接或通过安全通道转发身份验证代理连接等。

最后,客户端请求一个shell或者执行一个命令。 双方然后进入会话模式。 在这种模式下,任何一方都可以随时发送数据,并且这些数据被转发到服务器端的shell或命令以及客户端的用户终端。

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

可以使用命令行选项或配置文件来配置sshd 。 命令行选项覆盖配置文件中指定的值。

sshd在接收到挂断信号时重新读取其配置文件, SIGHUP通过执行它自己的名称来启动它,即/ usr / sbin / sshd

选项如下:

-b

指定临时协议版本1服务器密钥中的位数(默认值768)。

-d

调试模式。 服务器将详细的调试输出发送到系统日志,并且不会将其自身置于后台。 服务器也不能工作,只会处理一个连接。 该选项仅用于调试服务器。 多个-d选项增加了调试级别。 最大值是3。

-e

当指定这个选项时, sshd会将输出发送到标准错误而不是系统日志。

-f 配置文件

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

-g login_grace_time

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

-h host_key_file

指定从中读取主机密钥的文件。 如果sshd不是以超级用户身份运行,则必须给出该选项(因为普通主机密钥文件通常不能被除root以外的任何人读取)。 协议版本1的缺省值是/ etc / ssh / ssh_host_key,协议版本2的缺省值是/ etc / ssh / ssh_host_rsa_key和/ etc / ssh / ssh_host_dsa_key。不同协议版本和主机密钥可能有多个主机密钥文件算法。

-一世

指定从inetd运行sshdsshd通常不会从inetd运行,因为它需要在响应客户端之前生成服务器密钥,这可能需要几十秒。 如果密钥每次都重新生成,客户端必须等待太久。 但是,使用inetd使用sshd的小密钥大小(例如512)可能是可行的。

-k key_gen_time

指定短暂协议版本1服务器密钥重新生成的频率(默认为3600秒或1小时)。 经常重新生成密钥的动机是密钥没有存储在任何地方,大约一个小时后,即使机器被破解或被物理占用,也无法恢复解密被拦截通信的密钥。 值为零表示密钥永远不会被重新生成。

-o 选项

可用于以配置文件中使用的格式提供选项。 这对于指定没有单独的命令行标志的选项很有用。

-p 端口

指定服务器侦听连接的端口(缺省值为22)。 多个端口选项是允许的。 当指定命令行端口时,忽略配置文件中指定的端口。

-q

静音模式。 什么都不会发送到系统日志。 通常记录每个连接的开始,认证和终止。

-t

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

-u len

该选项用于指定保存远程主机名的utmp结构中字段的大小。 如果解析的主机名比len长,则将使用带点的十进制值。 这允许具有很长主机名的主机溢出该字段仍然被唯一标识。 指定 - u0表示只应将点分十进制地址放入utmp文件。 - u0也用于防止sshd发出DNS请求,除非认证机制或配置需要它。 可能需要DNS的身份验证机制包括RhostsAuthentication RhostsRSAAuthentication HostbasedAuthentication并在密钥文件中使用from = pattern-list选项。 需要DNS的配置选项包括在AllowUsersDenyUsers中使用USER @ HOST模式

-D

当指定此选项时, sshd不会分离,并且不会成为守护进程。 这允许轻松监视sshd

-4

强制sshd仅使用IPv4地址。

-6

强制sshd仅使用IPv6地址。

配置文件

sshd从/ etc / ssh / sshd_config(或在命令行中用-f指定的文件)读取配置数据。 文件格式和配置选项在sshd_config5中描述。

登录过程

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

  1. 如果登录名在tty上,并且没有指定任何命令,则输出最后的登录时间和/ etc / motd(除非在配置文件或$ HOME / .hushlogin中禁止,请参阅Sx FILES部分)。
  2. 如果登录名在tty上,则记录登录时间。
  3. 检查/ etc / nologin是否存在,打印内容并退出(除非root)。
  4. 更改以普通用户权限运行。
  5. 建立基本的环境。
  6. 读取$ HOME / .ssh / environment(如果它存在并允许用户更改其环境)。 请参阅sshd_config5中的PermitUserEnvironment选项。
  7. 更改用户的主目录。
  8. 如果$ HOME / .ssh / rc存在,则运行它; 否则,如果/ etc / ssh / sshrc存在,运行它; 否则运行xauth。 标准输入中给出了``rc''文件的X11认证协议和cookie。
  9. 运行用户的外壳或命令。

Authorized_Keys文件格式

$ HOME / .ssh / authorized_keys是默认文件,它列出了允许在协议版本1中进行RSA身份验证以及在协议版本2中进行公共密钥身份验证(PubkeyAuthentication)的公钥。AuthorizedKeysFile可用于指定替代文件。

文件的每一行都包含一个键(以'#'开始的空行和行被忽略为注释)。 每个RSA公钥由以下字段组成,用空格分隔:选项,位,指数,模数,注释。 每个协议版本2公钥包含:选项,密钥类型,base64编码密钥,注释。 选项字段是可选的; 它的存在取决于该行是否以数字开头(选项字段从不以数字开头)。 位,指数,模数和注释字段给出协议版本1的RSA密钥; 注释字段不用于任何内容(但可能方便用户识别密钥)。 对于协议版本2,keytype是“ssh-dss”或“ssh-rsa”

请注意,此文件中的行通常是几百个字节 (因为公钥编码的大小)。 你不想输入它们; 相反,请复制identity.pub id_dsa.pub或id_rsa.pub文件并对其进行编辑。

sshd为协议1和协议2密钥的768位强制执行最小RSA密钥模数大小。

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

从=模式列表

指定除公钥认证之外,远程主机的规范名称必须存在于逗号分隔的模式列表中(“*”和“?”用作通配符)。 该列表还可能包含通过用'!'作为前缀而取消的模式。 ; 如果规范主机名匹配否定模式,则不接受密钥。 此选项的目的是可选地增加安全性:公钥身份验证本身不信任网络或名称服务器或任何东西(但密钥); 然而,如果某人以某种方式窃取了密钥,该密钥允许入侵者从世界任何地方登录。 这个附加选项使得使用被盗密钥更加困难(名称服务器和/或路由器除了密钥之外还必须被破坏)。

命令=命令

指定只要使用此密钥进行身份验证就执行该命令。 用户提供的命令(如果有)将被忽略。 如果客户端请求一个pty,该命令在一个pty上运行; 否则它会在没有tty的情况下运行。 如果需要8位干净通道,则不得请求pty或应指定no-pty 。引号可以通过引用反斜杠引用。 此选项可能会限制某些公钥只执行特定操作。 一个例子可能是允许远程备份的密钥,但没有别的。 请注意,客户端可能会指定TCP / IP和/或X11转发,除非它们被明确禁止。 请注意,该选项适用于shell,命令或子系统执行。

环境= NAME =值

指定在使用此密钥登录时要将字符串添加到环境中。 以此方式设置的环境变量覆盖其他默认环境值。 这种类型的多个选项是允许的。 环境处理在默认情况下处于禁用状态,并且通过PermitUserEnvironment选项进行控制。 如果启用UseLogin,则此选项会自动禁用。

无端口转发

使用此密钥进行身份验证时,禁止TCP / IP转发。 客户端的任何端口转发请求都会返回错误。 这可以用于,例如,与命令选项相关联。

没有X11转发

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

无代理转发

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

无终端

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

permitopen =主机:端口

限制本地``ssh -L''端口转发,使其只能连接到指定的主机和端口。 IPv6地址可以用另一种语法指定: 主机/端口多个permitopen选项可以用逗号分隔。 在指定的主机名上不执行模式匹配,它们必须是文字域或地址。

例子

1024 33 12121 ... 312314325 ylo@foo.bar

from =“*。niksula.hut.fi,!pc.niksula.hut.fi”1024 35 23 ... 2334 ylo @ niksula

命令=“dump / home”,no-pty,no-port-forwarding 1024 33 23 ... 2323 backup.hut.fi

permitopen =“10.2.1.55:80”,permitopen =“10.2.1.56:25”1024 33 23 ... 2323

Ssh_Known_Hosts文件格式

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

这些文件中的每行包含以下字段:主机名,位,指数,模数,注释。 这些字段由空格分隔。

主机名是逗号分隔的模式列表('*'和'?'充当通配符); 每个模式依次与规范主机名(在对客户端进行身份验证时)或用户提供的名称(在对服务器进行身份验证时)进行匹配。 一个模式也可以以`!'开头 以表明否定:如果主机名称与否定模式相匹配,即使它与线路上的另一模式匹配,也不会被该线路接受。

位,指数和模数直接来自RSA主机密钥; 它们可以从/etc/ssh/ssh_host_key.pub中获得,可选的注释字段会持续到该行的末尾,并且不会被使用。

作为注释忽略以'#'开始的行和空行。

当执行主机认证时,如果任何匹配的线路具有正确的密钥,则接受认证。 因此,允许(但不推荐)为同一名称设置多行或不同的主机密钥。 当来自不同域的简短形式的主机名被放入文件时,这将不可避免地发生。 这些文件可能包含冲突的信息; 如果可以从两个文件中找到有效信息,则验证将被接受。

请注意,这些文件中的行通常长达数百个字符,并且您绝对不希望手动输入主机密钥。 相反,可以通过脚本或采用/etc/ssh/ssh_host_key.pub并在前面添加主机名来生成它们。

例子

closenet,...,130.233.208.41 1024 37 159 ... 93 closenet.hut.fi cvs.openbsd.org,199.185.137.3 ssh-rsa AAAA1234 ..... =

也可以看看

scp(1),sftp(1),ssh(1),ssh-add1,ssh-agent1,ssh-keygen1,login.conf5,模数(5),sshd_config5,sftp-server8

T. Ylonen T. Kivinen M. Saarinen T. Rinne S. Lehtinen “SSH协议体系结构” draft-ietf-secsh-architecture-12.txt 2002年1月工作进展资料

M. Friedl N. Provos WA Simpson “用于SSH传输层协议的Diffie-Hellman组交换” draft-ietf-secsh-dh-group-exchange-02.txt 2002年1月工作进度资料

重要提示:使用man命令( %man )查看特定计算机上的命令使用方式。