文章目录
- 前言
- 一、基于口令的认证(用户名密码)
- 二、基于公钥的认证(免密登录)
- 三、禁止用户登录和修改端口
- 四、免密登录具体操作
前言
非对称加密是在认证用户连接的时候使用的,对称加密是在用户连接之后开始传输数据的时候加密数据的
一、基于口令的认证(用户名密码)
1.客户端请求连接;
2.服务端将公钥发送到客户端(需要用户同意,公钥保存在用户家目录下 的.ssh/known_hosts
);
3.客户端使用公钥加密自己的密码;
4.服务端收到客户端用公钥加密的密码以后用私钥进行解密;
5.使用解密的密码进行验证,验证没问题登录成功。
注:但是要确认公钥是所需要连接的服务器发出的,有坏人会进行中间人攻击,利用它自己的公钥发送给用户,用户使用了坏人的公钥加密密码,这样坏人解密以后就知道了用户的密码,然后就用用户的密码去连接真正的服务器。
二、基于公钥的认证(免密登录)
1.客户端要首先生成一对密钥(公钥和私钥)
2.把客户端的公钥需要你手动放到服务器上面(要手动的放到服务器,首先得知道这个服务器),这里就已经确保服务器是可信的。放到服务器的用户家目录的~/.ssh/authorized_keys
3.客户端请求服务器
4.服务器收到客户端的请求之后,先生成随机数random_server, 使用客户端放在authorized_keys这个文件中的公钥对随机数进行加密pubkey(random_server)发送给客户端
5.客户端有公钥和私钥,客户端收到这个加密的数据pubkey(random_server), 客户端使用私钥进行解密拿到random_server使用MD5(hash) 对random_server和sessionkey(会话密钥,在密钥交换步骤产生的)加密形成一个摘要digest1发送给服务器
6.服务器接收到digest1, 然后服务器本身自己使用之前协商过的MD5算法,自己也知道random_server, 也知道会话密钥sessionkey也是使用MD5算法对random_server sessionkey进行加密形成摘要digest2,最后去比较digest1 和 digest2是否相等,如果相等,登录成功,如果不相等,登录失败。
三、禁止用户登录和修改端口
配置文件/etc/ssh/sshd_config
PermitRootLogin设置no为不允许root用户登录,设置为yes为允许root用户登录
设置端口号为10086,如果修改配置文件后重启失败可能是selinux影响,可以关闭selinux解决
客户端不验证指纹StrictHostKeyChecking ask (ssh_config文件)
密码生成工具:pwgen -cnBs1 7 3
踢出登录的用户:pkill -kill -t pts/1
四、免密登录具体操作
本机IP192.168.68.178
服务器IP192.168.68.181(需要被登录的机器)
ssh-keygen #生成公钥与私钥
ssh-copy-id -p 2222 zhangsan@192.168.68.181 #将公钥传到需要被登录的机器,端口号修改过2222,默认是22