为什么要使用 ssh 免密登录

中间人攻击

我们知道,不通过免密登录的流程是:

  1. 服务端接收到登录请求,返回公钥
  2. 本地主机将密码使用公钥加密后,发送给服务端
  3. 服务端使用私钥解密,获取密码明文后进行密码验证
### 试想 1. 本地主机DNS被劫持 或者 本地局域网遭受arp攻击 2. 攻击者通过伪造远程服务器的方式,截取登录请求,返回伪造的公钥 3. 本地主机并不知道返回的公钥是伪造的,还会将密码与公钥进行加密,返回给伪造的服务端 4. 服务端攻击者获取到密码密文,自行解密得到密码明文 ## 免密登录流程 1. 本地主机生成秘钥和公钥 2. 本地主机将公钥上传至服务端并配置好 3. 本地主机ssh连接服务端,给服务端发送数据包,包括计算机名和IP等 4. 服务端接收到服务器名,查找是否允许该主机免密连接,如果允许,则生成一个随机字符串 5. 服务端使用公钥,将随机字符串进行加密,并将加密结果发回给本地主机 6. 本地主机将加密字符串使用私钥解密,将解密好的字符串又发回给服务端 7. 服务端接收到解密字符串,将其与生成的字符串进行比对,如果匹配,则允许免密登录

密码经过了双向验证,可以保证安全性

设置

  1. 本地控制台生成ssh公钥(id_rsa.pub)和私钥(id_rsa)
ssh-keygen -t rsa
  1. 将生成的公钥(id_rsa.pub)追加至服务端的~/.ssh/authorized_keys文件内
  2. 设置authorized_keys文件的权限为600(所有者可读可写)
chmod 600 ~/.ssh/authorized_keys

配置文件问题

配置完之后可能不能顺利连接,此时需要找到:

/etc/ssh/sshd_config

sshd配置文件下的这三行

#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile	.ssh/authorized_keys

把注释去掉,重启sshd服务,既可以顺利连接

本地曾经生成过id_rsa和id_rsa.pub

因为本地ssh默认是使用id_rsa作为私钥文件进行解密的。因此,此时直接将id_rsa.pub的内容追加到服务器端即可

再说中间人

事实上,如果真的有“中间人”拦截住了所有的请求,本地主机和远程服务端的请求往来还是会被截取用于分析。
虽说数据是被加密了的,但是还是免不了会有安全风险在。
因此,没有绝对安全的系统,也没有绝对安全的手法。只能通过不断提高自己的安全意识来做好防范,避免因为安全意识太过薄弱而造成很大的风险。

添加新评论