1、监听端口及IP设置

Port 22                           

AddressFamily any

ListenAddress 0.0.0.0

ListenAddress ::

Protocol 2

/*

Port:sshd服务端口,预设22,也可以开放多个端口

AddressFamily:使用地址族,any(默认)、inet(仅IPv4)、inet6(仅IPv6)

ListenAddress:设置监听的地址

Protocol:SSH协议版本

*/

2、私钥存放位置

# 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_key

HostKey /etc/ssh/ssh_host_ecdsa_key

HostKey /etc/ssh/ssh_host_ed25519_key

/*

主机私钥存放位置

*/

3、秘钥过期时间和大小

KeyRegenerationInterval 1h

ServerKeyBits 1024

/*

对于SSH-1协议中秘钥的过期时间和大小

*/

4、日志相关设置

# Logging

SyslogFacility AUTH

SyslogFacility AUTHPRIV

LogLevel INFO

/*

SyslogFacility:日志系统选择

LogLevel:日志等级选择

*/

5、权限限制设置

# Authentication:

LoginGraceTime 2m

PermitRootLogin yes

StrictModes yes

MaxAuthTries 6  #MaxAuthTries,指定每个连接最大允许的认证次数。默认值是6

MaxSessions 10

/*

LoginGraceTime:限制认证时限

PermitRootLogin:允许ROOT账户登录,prohibit-password禁止root登录,同no

StrictModes:检查用户主目录和相关的配置文件

MaxAuthTries:最大认证次数

MaxSessions:最大保持连接数

*/

6、公钥认证

RSAAuthentication yes

PubkeyAuthentication yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2

# but this is overridden so installations will only check .ssh/authorized_keys

AuthorizedKeysFile .ssh/authorized_keys

/*

RSAAuthentication:SSH-1公钥认证

PubkeyAuthentication:SSH-2公钥认证

AuthorizedKeysFile:授权秘钥文件

*/

7、SSH-1/2可信主机

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts

RhostsRSAAuthentication no

# similar for protocol version 2

HostbasedAuthentication no

# Change to yes if you don't trust ~/.ssh/known_hosts for

# RhostsRSAAuthentication and HostbasedAuthentication

IgnoreUserKnownHosts no

# Don't read the user's ~/.rhosts and ~/.shosts files

IgnoreRhosts yes

/*

RhostsRSAAuthentication:SSH-1强可信主机

HostbasedAuthentication:SSH-2强可信主机

IgnoreUserKnownHosts:认证过程中忽略用户的 ~/.ssh/known_hosts 文件

IgnoreRhosts:认证过程中忽略 .rhosts 和 .shosts 文件

*/

8、密码认证设置

# To disable tunneled clear text passwords, change to no here!

PasswordAuthentication yes

PermitEmptyPasswords no

/*

PasswordAuthentication:yes使用密码认证

PermitEmptyPasswords:允许密码为空账户登录

*/

9、是否允许质疑-应答

# Change to no to disable s/key passwords

ChallengeResponseAuthentication yes

/*

ChallengeResponseAuthentication:是否允许质疑-应答(challenge-response)认证

*/

10、Kerberos认证

# Kerberos options

KerberosAuthentication no

KerberosOrLocalPasswd yes

KerberosTicketCleanup yes

KerberosGetAFSToken no

/*

KerberosAuthentication:是否使用Kerberos认证

KerberosOrLocalPasswd:如果 Kerberos 密码认证失败,那么该密码还将要通过其它的认证机制

KerberosTicketCleanup:是否在用户退出登录后自动销毁用户的 ticket

KerberosGetAFSToken:尝试获取一个 AFS token

*/

11、GSSAPI 的用户认证

# GSSAPI options

GSSAPIAuthentication yes

GSSAPICleanupCredentials no

GSSAPIStrictAcceptorCheck yes

/*

GSSAPIAuthentication:是否允许使用基于 GSSAPI 的用户认证

GSSAPICleanupCredentials:是否在用户退出登录后自动销毁用户凭证缓存

GSSAPIStrictAcceptorCheck:是否严格检查GSSAPI的用户认证

*/

12、PAM认证登录

# Set this to 'yes' to enable PAM authentication, account processing,

# and session processing. If this is enabled, PAM authentication will

# be allowed through the ChallengeResponseAuthentication and

# PasswordAuthentication.  Depending on your PAM configuration,

# PAM authentication via ChallengeResponseAuthentication may bypass

# the setting of "PermitRootLogin without-password".

# If you just want the PAM account and session checks to run without

# PAM authentication, then enable this but set PasswordAuthentication

# and ChallengeResponseAuthentication to 'no'.

# WARNING: 'UsePAM no' is not supported in Red Hat Enterprise Linux and may cause several

# problems.

UsePAM yes/*

UsePAM:是否使用PAM认证登录

*/

13、X11转发设置

AllowAgentForwarding yes

AllowTcpForwarding yes

GatewayPorts noX11Forwarding yes

X11DisplayOffset 10

X11UseLocalhost yes

PermitTTY yes

PrintMotd yes

PrintLastLog yes #PrintLastLog参数控制是否显示上一次登录信息,默认是yes,即显示

TCPKeepAlive yes

UseLogin no

UsePrivilegeSeparation sandbox  #Default for new installations.

PermitUserEnvironment no

Compression delayed

ClientAliveInterval 0

ClientAliveCountMax 3

ShowPatchLevel no

UseDNS yes

PidFile /var/run/sshd.pid

MaxStartups 10:30:100

PermitTunnel no

ChrootDirectory none

VersionAddendum none

/*

AllowAgentForwarding:是否允许转发ssh-agent

AllowTcpForwarding:是否允许TCP转发

GatewayPorts:是否允许远程主机连接本地的转发端口

X11Forwarding:是否允许进行 X11 转发

X11DisplayOffset:指定X11 转发的第一个可用的显示区(display)数字

X11UseLocalhost:是否应当将X11转发服务器绑定到本地loopback地址

PermitTTY:是否允许pty分配

PrintMotd:是否在每一次交互式登录时打印 /etc/motd 文件的内容

PrintLastLog:是否在每一次交互式登录时打印最后一位用户的登录时间

TCPKeepAlive:是否向客户端发送 TCP keepalive 消息

UseLogin:是否在交互式会话的登录过程中使用 login

UsePrivilegeSeparation:是否让 sshd 通过创建非特权子进程处理接入请求的方法来进行权限分离

PermitUserEnvironment:是否允许 sshd处理environment

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

ClientAliveInterval:设置时长秒),向客户端发送一个”alive”消息并等候应答默认是0, 不发送

ClientAliveCountMax:sshd 在未收到任何客户端回应前最多允许发送多少个”alive”消息

ShowPatchLevel:是否显示ssh的补丁信息

UseDNS:是否应该对远程主机名进行反向解析

PidFile:pid文件位置

MaxStartups:指定并发未认证的最大数量节点到SSH守护进程,10:30:100表示如果超过10个并发初始连接,则后续的连接由30%的概率直接关闭,如果超过100个连接,则所有新连接100%直接关闭。

PermitTunnel:是否允许 tun 设备转发

ChrootDirectory:指定chroot认证的路径名

VersionAddendum:连接时指定附加文本

*/

14、显示信息给远程用户

# no default banner path

Banner none

/*

Banner:将这个指令指定的文件中的内容在用户进行认证前显示给远程用户

*/

15、传递到会话环境中的环境变量

# Accept locale-related environment variables

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES

AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT

AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE

AcceptEnv XMODIFIERS

/*

AcceptEnv:指定客户端发送的哪些环境变量将会被传递到会话环境中

*/

16、配置一个外部子系统

# override default of no subsystems

Subsystem sftp  /usr/libexec/openssh/sftp-server

/*

Subsystem:配置一个外部子系统

*/

17、简单优化sshd配置

实际上sshd_config参数除了如下表格中,还有很多,只是我们大部分我们都使用默认值即可。果想了解每个参数的用途和说明,我们可以使用man sshd_config命令进行查看。

[root@java382 ~]# Vim /etc/ssh/sshd_conf

PermitRootLogin no    #阻止root用户登录;

PermitRootLogin without-password   #充许root基于密钥登录;

PasswordAuthentication no    /#禁止使用SSH进行密码身份验证登录。

port 6022   #取消注释此项止,设定ssh端口,默认为22

GSSAPIAuthentication no  #设置为no可以加快ssh连接速度

MaxSessions 1000 #最大保持连接数

MaxStartups 100:30:1000 #配置并发连接数关闭策略,防git和sftp经常性无法连接

UseDNS no      #设置为no可以加快ssh连接速度

#Subsystem sftp /usr/libexec/openssh/sftp-server #注释此项关闭sftp工作模式禁用sftp登录

[root@java382 ~]# systemctl restart sshd #保存修改,重启服务生效

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐