SSH服务器管理:sshd安装、配置文件、命令行配置项
简介
SSH的架构是服务器/客户端模式,两端运行的软件不同。 OpenSSH的客户端软件是ssh,服务器软件是sshd。本章介绍了关于sshd的各种知识。
如果没有安装sshd,可以通过以下命令安装。
# Debian
$ sudo aptitude install openssh-server
# Red Hat
$ sudo yum install openssh-server
一般来说,sshd 在安装后与系统进行对话。如果当前没有启动 sshd,可以使用以下命令启动它。
$ sshd
运行上述命令后,如果询问“sshd re-exec requireexecution with anabsolutepath”,则必须使用绝对路径启动。这是为了防止有人为了不同的目的,将同名的软件放在 $PATH 变量指向的目录中,而不是真正的 sshd 中。
# Centos、Ubuntu、OS X
$ /usr/sbin/sshd
执行上述命令后,sshd会自动进入后台,所以命令后面不需要添加&。
除了直接运行可执行文件之外,您还可以通过systemd启动sshd。
# 启动
$ sudo systemctl start sshd.service
# 停止
$ sudo systemctl stop sshd.service
# 重启
$ sudo systemctl restart sshd.service
以下命令使 sshd 在计算机下次启动时自动启动。
$ sudo systemctl enable sshd.service
sshd 配置文件
sshd 的配置文件位于 /etc/ssh 目录中。主要配置文件是sshd_config。此外,还有一些安装时生成的密钥。
/etc/ssh/sshd_config:配置文件/etc/ssh/ssh_host_ecdsa_key:ECDSA 私钥。/etc/ssh/ssh_host_ecdsa_key.pub:ECDSA 公钥。/etc/ssh/ssh_host_key:SSH 1 协议版本的 RSA 私钥。/etc/ssh/ssh_host_key.pub:SSH 1 协议版本的 RSA 公钥。/etc/ssh/ssh_host_rsa_key:SSH 2 协议版本的 RSA 私钥。/etc/ssh/ssh_host_rsa_key.pub:SSH 2 协议版本的 RSA 公钥。/etc/pam.d/sshd:PAM 配置文件。
注意,重新安装sshd会重新生成上述密钥,导致重新连接ssh服务器时客户端会弹出警告并拒绝连接。为了避免这种情况,您可以在重新安装 sshd 时先备份目录 /etc/ssh,然后在创建安装后恢复该目录。
配置文件 sshd_config 的格式是每条命令占一行。每行包含一个配置元素及其相应的值。配置项不区分大小写,与值之间用空格分隔。
Port 2034
上述配置命令指定配置项Port的值为2034。 端口也可以写成端口。
配置文件有一种不同的格式,即配置项和值之间有一个等号,等号前后的空格是可选的。在
Port = 2034
配置文件中,以#开头的行代表注释。
# 这是一行注释
请注意,注释只能放在行首,不能放在行尾。
Port 2034 # 此处不允许注释
以上写法是错误的。
即使是空行也相当于注释。
sshd 启动时会自动读取默认配置文件。如果想使用其他配置文件,可以通过sshd命令的-f参数指定。
$ sshd -f /usr/local/ssh/my_config
上述命令指定 sshd 使用不同的配置文件my_config。
编辑配置文件后,可以使用sshd命令-t(测试)检查是否有语法错误。
$ sshd -t
配置文件更改后,不会自动应用,需要重启sshd。
$ sudo systemctl restart sshd.service
sshd 密钥
sshd 有自己的一对或多对密钥。它使用密钥向客户端证明其身份。所有密钥均以公钥和私钥对的形式出现。公钥文件名一般是私钥文件名加上后缀.pub。
DSA格式的密钥文件默认为 如果密钥不是默认文件,可以通过配置文件中的 上面命令前面的 如果要更改键,请删除行开头的 以下为 accceptenv AllowGroups AllowUsers AuthorizedKeysFile 理论上,“键盘交互”认证方案可以询问用户多个问题,但实际上通常只要求用户输入密码。如果您进行基于密码的身份验证,则需要同时完成 Ciphers ClientAliveCountMax ClientAliveInterval 压缩 DenyGroups❿❿❿ 更改不允许登录的用户组() DenyGroups 组名称 FascistLogging SSH 1版本专用,指定日志输出所有调试信息( HostKey KeyRegenesisInterval 如果要监听多个指定的IP地址,可以使用多行 LoginGraceTime LogLevel MACs MaxAuthTries MaxStartups 此属性也可以设置为 PasswordAuthentication PermitEmptyPasswords PermitRootLogin 另一种写法是写成 PermitUserEnvironment Port 配置文件可以使用多个 上例表示同时监控4个端口。 PrintMotd PrintLastLog 协议 PubKeyAuthentication QuietMode 特别是对于 SSH 1 版本,指定的日志仅输出致命错误消息( RSAAuthentication ServerKeyBits StrictModes SyslogFacility TCPKeepAlive-?禁用该选项意义不大,如果DNS更新不及时,可能会误判,所以建议禁用。 UseLogin UserPrivilegeSeparation VerboseMode SSH 2版本专用,指定日志输出详细调试信息( X11Forwarding 编辑配置文件后,可以使用以下命令检查配置文件是否存在语法错误。 为了使新的配置文件生效,必须重新启动sshd。 sshd 命令有几个配置项。这些配置项在调用时指定,并且可以覆盖配置文件中的设置。 (1) (2) (3) (4) 参数 (5) (6) 配置项与对应值之间可以使用等号。 如果省略等号前后的空格,则不需要使用引号。 (7) 上述命令指定在端口 (8) /etc/ssh/ssh_host_dsa_key(公钥为ssh) RSA格式密钥为/etc/s sh/ssh_host_rsa_key (公钥是 ssh_host_rsa_key.pub)。如果需要支持 SSH 1 协议,则必须拥有密钥 /etc/ssh/ssh_host_key。HostKey配置项进行设置 ❿❿❿❿❿❿❿❿❿❿❿ HostKey 默认密钥设置如下接下来。 # HostKey for protocol version 1
# HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
# HostKey /etc/ssh/ssh_host_rsa_key
# HostKey /etc/ssh/ssh_host_dsa_ke
#表示这些行是注释,因为这是默认值,有没有这些行都是一样的。 #,然后指定另一个键。 HostKey /usr/local/ssh/my_dsa_key
HostKey /usr/local/ssh/my_rsa_key
HostKey /usr/local/ssh/my_old_ssh1_key
sshd 配置项
/etc/ssh/sshd_config 文件中的配置项。 accingv指定允许通过sendenv命令从客户端接受哪些环境变量,这是客户端的环境列表,变量名之间用空格分隔。 (AcceptEnv 路径术语)。 AllowGroups指定允许登录的用户组(AllowGroups groupNamed,不使用单独的组,不允许登录。AllowUsers指定允许登录的用户。使用空格分隔用户名(AllowUsers❀❙❀❙–AllowUsers user 1 user2❿也可以使用多行)。AllowU命令sers 指定,用户名支持使用通配符,如果不使用此项,则所有用户都可以登录。此项也可以采用用户名@域名❿的格式(如AllowUsers jones) @example.com)。是(允许Tcp转发是), 本地 表示只允许本地端口转发,远程❙ ❿远程 是只允许。DEBUG1AuthorizedKeysFile指定存储用户公钥的目录。默认为用户主目录的 ssh/authorized_keys 目录 ( AuthorizedKeysFile .ssh/authorized_keys❿)。 banner ChallengeResponseAuthentication、ChallengeResponseAuthentication指定是否使用“键盘交互”身份验证方案,默认值为❀❿ChallengeResponseAuthentication(是)。 passwordautical Authornication 和 挑战职位申请 、。 、Ciphers指定 sshd 可以接受的加密算法 (Ciphers 3des-cbc、)。使用逗号分隔不同的算法。 )。如果设置为ClientAliveCountMax指定在建立连接后客户端失去响应时服务器尝试连接的次数 (xClientAlive❙❓xClientAlive8)。 指定命令。 ClientAliveInterval指定允许客户端空闲的时间,以秒为单位(ClientAliveInterval 180)。如果客户端在这段时间内没有发送信号,SSH连接将被关闭。 )。 ?用户压缩指定客户端与服务器之间的数据传输是否进行压缩。默认值为 yes(压缩 yes) FascistLogging yes)。 HostKey指定sshd服务器的密钥,具体请参见上一篇文章。 KeyRegenesisInterval指定 SSH 1 版本的密钥重新生成间隔(以秒为单位)。默认值为 3600 秒 (KeyRegenesisInterval 3600)。 ? ) 表示该机器接口上启用了所有网络。您可以将其更改为仅在特定网络接口上启用(例如ListenAddress 192.168.10.23),也可以指定域名来启用它(例如❙❙L.com.) )。 ListenAddress命令。 ListenAddress 172.16.1.1
ListenAddress 192.168.0.1
LoginGraceTime指定客户端在登录时允许空闲的最长时间。 登录宽限时间 600,则表示没有限制。LogLevel指定日志的详细级别。可能的值为 quea、fatal、❿Ror❿ info boxe、dbugu 、DEBUG2♿、 ,默认为 INFO (日志级别 INFO)。 MACs指定 sshd 可以接受的数据验证算法 (MACs hmac-sha1❀❓)。使用逗号分隔不同的算法。 MaxAuthTries指定允许的最大 SSH 登录尝试次数 (MaxAuthTries 3❿)。如果密码输入错误达到指定次数,SSH 连接将被关闭。 MaxStartups指定允许的同时 SSH 连接数 (MaxStartups)。如果设置为0,则表示没有限制。 A:B:C 的形式,例如 MaxStartups 10:50:20 这意味着将达到 con❙0:20 租赁连接,然后将连接有50%的概率被拒绝;当达到 20 个并发连接时,后续连接 100% 被拒绝。 PasswordAuthentication 指定是否允许密码登录。默认值为yes(密码认证 yes),建议❿❿❿❿❿❝❿❝提供密码登录,仅按键登录允许)。 PermitEmptyPasswords指定是否允许空密码登录,即用户密码是否可以为空。默认为yes(允许空密码yes)无密码禁止)。PermitRootLogin指定root用户是否可以登录,默认为yes❀(er gin yes ),建议更改它不(禁止root用户登录)。 forbidden-password,也就是说root用户无法使用密码登录,但可以使用密钥登录。 PermitRootLogin prohibit-password
PermitUserEnvironment 指定是否允许 sshd 从客户端加载客户端的 ~and♿~ 和♿❝-and♿-❝ 文件~ 环境变量设置。默认值为 ~ 中/.ssh/authorized_keys文件environment=optionsno (PermitUserEnvironment no)。 Port指定sshd监听的端口,即客户端连接的端口。默认值为 22(端口 22)。出于安全原因,您可以更改此端口(例如端口 8822)。 port命令同时监听多个端口。 Port 22
Port 80
Port 443
Port 8080
PrintMotd 指定登录后是否向用户显示系统的mod(当日消息)信息文件/♿/。该文件用于通知所有用户重要的事情,例如系统维护时间、安全问题等。默认值为 yes (PrintMotd yes❿)。由于shell正常显示该信息文件,因此可以将其更改为no。 PrintLastLog指定是否打印上次用户登录时间。默认值为 是(PrintLastLog 是 )。 协议指定 sshd 使用的协议。协议 1 表示使用 SSH 1 协议。建议更改为协议2(使用SSH 2协议)。 协议 2,1表示同时支持两个版本的协议。 PubKeyAuthentication指定是否允许公钥登录。默认值为 yes(PubKeyAuthentication yes )。 QuietMode yes)。 RSAAuthentication指定启用RSA认证,默认值为yes❀和yes)。 ServerKeyBits指定重新生成 SSH 1 版本密钥时的位数。默认值为 768 (服务器密钥位 768)。 StrictModes指定sshd是否检查用户的一些重要文件和目录的权限。默认为yes(StrictModes yes),即对于用户的SSH配置文件,用户必须是目录中的根文件,用户必须是目录中的根文件是目录。 ,必须禁用其他用户组和写入权限。 SyslogFacility指定 Syslog 如何处理 sshd 日志。默认为身份验证 (SyslogFacility AUTH)。 UseLogin 指定是否在内部使用 /usr/bin/login 进行用户身份验证。默认为无(使用登录 no)。 UserPrivilegeSeparation指定用户通过认证后,使用另一个子线程来处理用户权限相关的操作,有助于提高安全性。默认值为 yes (UsePrivilegeSeparation yes)。 VerboseMode yes)。 $ sshd -t
$ sudo systemctl restart sshd
sshd 的命令行配置项
-d-d 参数用于显示调试信息。参数 $ sshd -d
-D-D 指定 sshd 不作为后台守护程序运行。 $ sshd -D
-e-e参数会让sshd将系统日志syslog的内容写入标准错误(默认错误)。 -f-f指定配置文件的位置。 -h-h参数用于指定密钥。$ sshd -h /usr/local/ssh/my_rsa_key
-o-o 该参数指定配置项以及配置文件对应的值。 $ sshd -o "Port 2034"
$ sshd -o "Port = 2034"
$ sshd -o Port=2034
-o 参数可以多次一起使用以指定多个配置关键字。 -p-p 该参数指定sshd的服务端口。 $ sshd -p 2034
2034上启动 sshd。 -p 参数可以指定多个端口。 $ sshd -p 2222 -p 3333
-t-t 该参数检查配置文件的语法是否正确。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网