-
Notifications
You must be signed in to change notification settings - Fork 18
harden server limit ssh
几乎每台服务上都会运行sshd服务。作为每天80%时间都在使用的工具,更需要重视起来
参考这里: why ssh key authentication is better
通常我们在使用ssh远程连接服务器特定用户的时候,都要输入远程帐户的密码完成认证。多次输入密码是一个 乏味的工作,而且一般大家为了简便,并不会使用复杂的强度高的密码。虽然ssh已经非常安全,但是使用单向的 密码认证,如果密码被泄露,其它人也就可以连接并控制服务器。
这里我们推荐使用公钥认证的方式,具体的原理就是
将自己的公钥放入服务器端相应帐户的authorized_keys中
做法
ssh-copy-id -i <id_rsa.pub path> <user>@<server.com>
- id_rsa.pub path: 通常是~/.ssh/id_rsa.pub
- user: 服务器帐户
- server.com: 服务器地址
这样每次我们连接服务器,都会得到服务器的认可,不再需要输入密码来认证,方便且更安全
step 1已经是一个不错的改进,使用密码认证时,谁拥有密码就可以登陆;使用认证时,谁使用了你的电脑/拥有你的私钥 才可以登陆。
不乏有这样的情况,如果有人趁你不在操纵你的电脑,或者你的电脑被入侵密钥被他人发现,未知的人就可以随意连接服务器。danger!
措施,参考这里: passphase for rsa key
在使用ssh-keygen生成密钥对的时候,填写passphase字段。即使私钥被泄露,缺少passphase,攻击者
仍不可使用私钥连接服务器
做法
ssh-keygen -t rsa
- passphase字段一定要填写
这样每次使用公钥认证连接服务器时,都需要passphase来确认连接(和以前输入服务器帐户密码相对比)
避免了每次输入服务器帐户密码来连接,但是使用了passphase来加密私钥,每次连接都需要输入passphase也 是一件乏味的事情。
ssh为我们提供了ssh-agent, ssh-add工具来避免乏味的工作
做法
启动ssh-agent
ssh-agent
将自己的私钥加入agent托管(需要输入passphase)
ssh-add
只需要在ssh-add的时候输入一次passphase,在之后每次连接服务器,都不需要再输入passphase。wonderful!
记得在操作结束之后,删除私钥托管并退出ssh-agent
ssh-add -D
ssh-agent -k
密码认证相对于公钥认证是不够安全的。我们可以在服务器端禁止所有密码认证的连接
修改配置文件
vi /etc/ssh/sshd_config
修改内容
PasswordAuthentication no
SSH历史上有SSH-1, SSH-2两个版本,SSH-1版本是不够安全的。强制使用SSH-2协议
修改配置文件
vi /etc/ssh/sshd_config
修改内容
Protocol 2
在公钥加密连接情况下,强制使用常规用户登陆好像不是那么必要
修改配置文件
vi /etc/ssh/sshd_config
修改内容
PermitRootLogin no
DenyUsers root
新建用户并设置密码
useradd -s /bin/bash <user>
passwd <user>
建议不给sudo权限,一般普通用户的密码都相对简单随便,加上sudo就不合适了
连接登陆ssh后用su切换root来进行操作,保密root密码