SSH使用密码登陆在某些特定的场合下具有很多缺点,采用公钥认证则能避免使用密码认证带来的很多问题。例如,多人可以通过持有各自的私钥登录到系统的同一个帐号,用户可以在安全保持私钥的前提下安全的执行无需输入密码登录等。
目前,Linux最常用的SSH服务端是OpenSSH,其服务端配置文件一般为/etc/ssh/sshd_config。sshd_config配置文件的文档可以参见https://www.ssh.com/ssh/sshd_config。重要的选项包括:
1、配置root登陆方式
让别人以root身份登录自己的服务器是件很危险的事,通过PermitRootLogin参数可以限定root用户通过ssh的登录方式,如禁止登陆、禁止密码登录、仅允许密钥登陆和开放登陆,包括如下的可选项:
参数值 | 是否允许ssh登陆 | 登录方式 | 交互shell |
---|---|---|---|
yes | 允许 | 没有限制 | 没有限制 |
prohibit-password | 允许 | 除密码外 | 没有限制 |
forced-commands-only | 允许 | 仅允许使用密钥 | 仅允许使用特定命令 |
no | 不允许 | N/A | N/A |
以上选项中,yes和no的功能显而易见,只是很粗暴的允许/禁止root用户进行登陆;prohibit-password在yes的基础上,禁止了root用户使用密码进行登陆;forced-commands-only则是:
If this option is set to “forced-commands-only”, root login with public key authentication will be allowed, but only if the command option has been specified (which may be useful for taking remote backups even if root login is normally not allowed). All other authentication methods are disabled for root.
设置了forced-commands-only之后,root用户仅允许使用密钥登陆且只允许执行在authorized_keys文件对应公钥的
command
参数中指定的命令,这种方式通常用来供定期需要使用root权限的用户登陆,但是只需要执行规定的脚本、命令的情形,如定期备份等周期性、固化的操作等。根据sshd的手册,command
的具体含义是:
也可以参见参考资料中IBM的链接。
由于没有交互式shell,而command中又只能添加一条命令,所以当想要执行多条命令时可以把该执行的命令全部封装到shell脚本中并在command中填入脚本的绝对路径即可:
此时,当以公钥方式方式登录(如果用密码登陆则不会生效)时会发现有:
当配置了command参数后,用户通过ssh命令号传入的自定义命令会被忽略。
2、禁用用户名密码认证
用户名密码总是存在泄漏的风险,通过PasswordAuthentication参数可以控制是否使能用户名密码认证(包括空密码):
此时,如果尝试使用用户名密码登陆时会收到报错:
参考资料:
1、https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.foto100/authkeyf.htm
2、https://www.novell.com/support/kb/doc.php?id=7007565
3、http://askubuntu.com/questions/449364/what-does-without-password-mean-in-sshd-config-file
4、https://blog.csdn.net/huigher/article/details/52972013
5、https://blog.knownsec.com/2012/05/ssh-%E5%85%AC%E9%92%A5%E8%AE%A4%E8%AF%81/
转载时请保留出处,违法转载追究到底:进城务工人员小梅 » SSH服务端禁用密码登陆、公钥认证及常见安全配置