sshd 服务端安全优化配置与免密登录
CentOS7自带的SSH服务是OpenSSH中的一个独立守护进程SSHD。由于使用telnet在网络中是明文传输所以用其管理服务器是非常不安全的不安全,SSH协议族可以用来对服务器的管理以及在计算机之间传送文件。
一、配置文件
日志文件 /var/log/secure
二、配置文件详解
Port 22 #默认端口 ListenAddress IP #监听服务器端的IP,ss -ntl 查看22端口绑定的iP地址 LoginGraceTime 2m #登录时不输入密码时超时时间 HostKey # HostKey本地服务端的公钥路径 UseDNS no #禁止将IP逆向解析为主机名,然后比对正向解析的结果,防止客户端欺骗 PermitRootLogin yes #是否允许root使用SSH远程登录 MaxAuthTries 6 #密码错误的次数6/2=3(MAN帮助中写明要除2)次后断开连接 MaxSessions 10 #最大的会话连接数(连接未登录的会话最大值,默认拒绝旧的连接未登录的会话) StrictModes yes #检查用户家目录中ssh相关的配置文件是否正确 PubkeyAuthentication yes #是否使用基于key验证登录 AuthorizedKeysFile .ssh/authorized_keys #key验证登录的客户端公钥路径 PasswordAuthentication yes #是否允许使用密码登录 PermitEmptyPasswords no #用户使用空口令登录 GatewayPorts no #启用网关功能,开启后可以将建立的SSH隧道(端口转发)共享出去 ChallengeResponseAuthentication no 关闭质疑-应答模式 ClientAliveCountMax 3 #探测3次客户端是否为空闲会话,↓3*10分钟后断开连接 ClientAliveInterval 10 #空闲会话时长,每10分钟探测一次 MaxStartups 10:30:100 #start:rate:full;当连接但为进行认证的用户超过10个,drop30%(rate/full)的连接当连接但未登录的连接达到100个后,新建立的连接将被拒绝 Banner /path/file #认证前输出的登录提示信息,指定文件路径 GSSAPIAuthentication no AllowUsers username #白名单,如果白名单有用户只有白名单的用户可以登陆 DenyUsers #黑名单,被拒绝的用户,如果即允许又拒绝则拒绝生效 AllowGroups #组白名单 DenyGroups #组黑名单
三、sed 快速修改配置
记住 先要备份 sshd_config 文件
[ ! -f /etc/ssh/sshd_config_bak ] && /bin/cp /etc/ssh/sshd_config{,_bak}
修改 ssh 远程访问端口 把 #Port 22 改为 Port 88888
sed -i 's/#Port .*/Port 88888/' /etc/ssh/sshd_config
禁止用户SSH空密码用户登录 PermitEmptyPasswords no
sed -i 's/#PermitEmptyPasswords no/PermitEmptyPasswords no/' /etc/ssh/sshd_config
对远程主机进行反向解析 禁用GSSAPI来认证,和DNS反向解析,加快SSH登陆速度
sed -i 's/^GSSAPIAuthentication yes$/GSSAPIAuthentication no/' /etc/ssh/sshd_config
禁止SSH反向解析 对远程主机进行反向解析,会减慢ssh连接速度
sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
认证前输出的登录提示信息,指定文件路径
sed -i 's/#Banner none/Banner /path/file/' /etc/ssh/sshd_config
禁止root远程登录(NO) 并且允许root用户远程登录(YES)
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
是否允许使用密码登录。只能用 SSH 公钥自动验证登录 yes更改为no
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
是不使用密钥建立 SSH 连接
sed -i 's/#RSAAuthentication .*/RSAAuthentication yes/' /etc/ssh/sshd_config
key验证登录的客户端公钥路径
sed -i 's/#AuthorizedKeysFile .ssh/AuthorizedKeysFile .ssh/' /etc/ssh/sshd_config
是否使用基于key验证登录
sed -i 's/#PubkeyAuthentication .*/PubkeyAuthentication yes/' /etc/ssh/sshd_config
开启秘钥认证
sed -i '/^#UsePAM no/a UsePAM no' /etc/ssh/sshd_config
start:rate:full;当连接但为进行认证的用户超过10个,
drop30%(rate/full)的连接当连接但未登录的连接达到100个后,新建立的连接将被拒绝
sed -i 's/#MaxStartups .*/MaxStartups 10:30:1000/' /etc/ssh/sshd_config
连接超时未10秒
sed -i '/^MaxStartups 10:30:1000/a LoginGraceTime 10m' /etc/ssh/sshd_config
连接但未登录的用户最大值为10
sed -i '/^LoginGraceTime 10m/a MaxSessions 10' /etc/ssh/sshd_config
尝试6次系统就断开连接
sed -i "s/#MaxAuthTries 6/MaxAuthTries 6/" /etc/ssh/sshd_config
SSH LogLevel设置为INFO,记录登录和注销活动
sed -i "s/#LogLevel INFO/LogLevel INFO/" /etc/ssh/sshd_config
四、免密登录(基于KEY验证登录)
在客户端成功密钥对,然后将公钥复制到要免密登录的服务器即可。
注:名称只能为 authorized_keys ,添加多个公钥信息可以直接追加 >> .ssh/authorized_keys
在 192.168.20.231 上操作 免密登录 192.168.20.232
一路按回车生成本地机器的密钥对,root位置在 /root/.ssh ,普通用户 admin 在 /home/admin/.ssh 下面
ssh-keygen -t rsa
运行上面命令后,系统会出现一系列提示,一路回车就可,运行结束以后,默认在/root/.ssh目录,普通用户在 /home/admin/.ssh 同时生成两个文件:
id_rsa:私钥
id_rsa.pub:公钥
.ssh文件夹赋权限 700
chown 0700 /home/admin/.ssh
实现本地免密登录,将 id_rsa.pub 中的内容拷贝到 authorized_keys
cat /home/admin/.ssh/id_rsa.pub >> /home/admin/.ssh/authorized_keys
设置普通用户家目录用户组权限 admin
chown admin.admin -R /home/admin/.ssh
用root先设置 authorized_keys; 的文件权限设置为 644,验证登录成功后在设置权限为600
chown 644 /home/admin/.ssh/authorized_keys
普通用户登录 将本地机器上公钥的文本直接copy到需要设置远程免密登录的服务器 ~/.ssh/authorized_keys,。
ssh-copy-id -i /home/admin/.ssh/id_rsa.pub -p 88888 admin@192.168.20.232
在这里输入yes,然后会提示输入 admin 远程登录密码
Are you sure you want to continue connecting (yes/no)? yes
验证登录远程主机
ssh -p '88888' 'admin@192.168.20.232'
注意:如果这里验证登录成功后,要把 authorized_keys; 的文件权限设置为 600
chown 600 /home/admin/.ssh/authorized_keys
SCP 上传
scp -r -P 88888 /home/admin/.ssh/id_rsa.pub admin@192.168.20.231:/home/admin/.ssh
SCP 下载
scp -r -P 88888 admin@192.168.20.231:/home/admin/.ssh/id_rsa.pub /home/admin/.ssh