文章目录
配置和保护SSH
远程访问
-
应用场景
- 在日常管理中,远程访问常应用于以下场景:
- 管理数据中心服务器
- 访问云服务器的场景
- 远程故障排查
-
常用方式
- telnet:明文传输的远程访问,不安全。某些企业甚至明令禁止使用 telnet
- ssh:也称 stelnet,是一种协议,提供加密的远程访问方式。在 linux 中,ssh 协议由软件包 openssh 提供,而 ssh 服务就是 sshd.service
SSH密码认证/登录
通信加密
+
中间人攻击
- SSH 虽然传输过程中很安全,但是在首次建立链接时,无法确认发来的公钥是否 真的来自所请求的服务器,如果有人在客户端请求服务器后拦截了请求,并返回 自己的公钥冒充服务器,这时候如果链接建立,那么所有的数据就都能被攻击者 用自己的私钥解密。这也就是所谓的中间人攻击。 两台机器交换公钥过程中,当服务端返回自己的公钥(第2步)的时候,客户端 会有一条信息提示:无法验证对方是否可信,并给出对方公钥的 MD5 编码值, 询问是否确定要建立链接
主机密匙管理
- 密匙存放位置
- /etc/ssh/ssh_known_hosts **由管理员预配置将公钥存储在这个文件中 **
- ~/.ssh/known_hosts **用户家目录下的默认存放路径 **
- 公钥存储格式为主机名、IP地址、公钥的加密算法、公钥的值
[- 设置密匙不匹配自动断开连接 :设置 /etc/ssh/ssh_config(全局)或者 ~/.ssh/config(用户)配置文件中的 StrictHostKeyChecking 参数为 yes(默认是ask),那么公钥不匹配的时候就会直接中断连接
- 由于硬盘故障或其他原因导致服务器的公钥被更换,将需要替换客户端中的旧密钥。
- 客户端自身的公钥有三个,分别是不同算法的公钥,路径是:/etc/ssh/*key.pub。
使用ssh远程登录
- ssh remotehostname/IP 使用当前用户登录
- ssh remoteuser@remotehostname 使用特定用户登录
- ssh servera
- ssh student@servera
- w 可以查看登录的用户以及等登录的来源
配置基于SSH密匙的身份验证
-
基于 SSH 密钥的身份验证 可以在不使用密码的情况下 进行身份验证,降低密码暴 露的风险
-
服务端使用客户端的公钥加 密随机字符串,验证客户端 身份。
-
-
配置过程
-
生成一对密匙 ssh-keygen
静默创建的密钥为 ~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub,权限是600和644。也可以使用 -f 选项,来自定义保存公钥和私钥的文件
生成的过程中,需要设置加密私钥的密码(passphrase),后续将需要使用该密码来解 密私钥。
-
将公钥传递到服务器上 ssh-copy-id hostname/ip
默认传输本地保存的公钥 ~/.ssh/id_rsa.pub 到服务器上,也就是将公钥写入远端的 ~/.ssh/authorized 文件中。可以使用 -i 选项指定本地的公钥。(写入的过程需要远端 的用户名和密码
-
登录
公钥传输完成后,将可以直接使用 ssh 登录,默认使用 ~/.ssh/id_rsa 作为解密的私钥, 也可以使用 -i 选项指定私钥的路径。
-
配置ssh-agent 实现真的无密码登录
ecal $(ssh-agent) ssh-agent
ssh-add 设置私钥密码,默认私钥为is_rsa 可以用-i指定
-
自定义openSSH 服务配置
OpenSSH 服务器配置文件
- OpenSSH 服务由一个名为 sshd 的守护进程提供,默认配置运行良好,但是可以做一些 更改以增强系统的安全性。它的配置文件为 /etc/ssh/sshd_config
禁止 root 用户使用SSH 直接登录系统
- 原因
- 基于安全因素,建议禁止 root 用户通过ssh直接登录系统
- 所有 Linux 系统上都默认存在用户名为 root 的超级用户,因此潜在的攻击者只要猜测其 密码或者使用穷举的方式破译密码,而不必猜测有效的密码账号组合就可以破解
- root 用户具有不受限制的特权(破环大,跟踪难)
- 配置过程
-
在配置文件 /etc/ssh/sshd_config 设置禁止 root 用户登录
PermitRootLogin yes =====> no
-
或设置仅允许 root 用户通过密钥的身份认证:
PermitRootLogin yes =====> without-password
-
重启 sshd 服务,使配置生效
systemctl restart sshd
禁止使用SSH 进行密码身份验证
-
原因
- 避免密码被暴力破解,如果设置了私钥密语,还可以进一步提高安全性
- 连接到远程服务器的shell访问更加便捷
-
配置过程:
-
在配置文件 /etc/ssh/sshd_config 设置禁止用户登录: PassWordAuthentication yes =====> no 将 yes 改为 no
-
重启 sshd 服务,使配置生效:
systemctl restart sshd
-
hentication yes =====> no 将 yes 改为 no
-
重启 sshd 服务,使配置生效:
systemctl restart sshd