我们上电脑课时,老师总是能够控制我们的电脑,但是用的却是他自己的电脑,这就是一种远程控制。服务端一般很少有用户界面直接使用,通常是命令控制的,并且一般而言还是远程的。
远程登录一般有两种方式:
密码登录:客户端发出授权请求时,服务端要求输入密码进行验证授权
密钥登录:客户端发出授权请求时,服务端根据事先配置的密钥验证身份并授权
配置步骤:
1、客户端生成密钥对,包括公钥、私钥
2、私钥配置在本地,将公钥发送给服务端
3、服务端将客户端的公钥加入到授权列表
SSH执行原理:
1、客户端发出远程登录请求 用户名@服务端主机名或者IP
2、服务端查看是否有 该用户名 的公钥
3、如果有,服务端生成随机字符串,并用公钥加密(就是随机字符串与公钥作某种运算),发送给客户端
4、客户端利用本地的私钥对字符串解密(逆运算)。
5、客户端将解密后的字符串结果发送给服务端
6、服务端利用解密的字符串与原始字符串匹配,如果相等,验证通过,并授权给客户端。
linux的SSH配置步骤:
1、本地生成密钥对
// 文件目录不指定,默认也是当前用户的.ssh目录下
$ ssh-keygen -t rsa (-f ~/.ssh/id_rsa)
// 可以看到由id_rsa 和 id_rsa.pub
2、拷贝公钥到服务端
// scp的意思就是 ssh copy
// 需要密码
$ scp id_rsa.pub servername:/home/fangxin
3、服务端,把公钥添加到授权列表
//服务端,在.ssh目录下创建文件 authorized_keys
$ touch authorized_keys
// 注意:
// authorized_keys的权限必须是600(-rw-------) !!!
注意:authorized_keys文件必须只能是该用户可读可写,其他用户组都是无权的状态才能生效。
$ chmod 600 authorized_keys
// 追加公钥信息到上述文件中
$ cat ~/id_rsa.pub >>authorized_keys
5、从客户端远程登录,如果不要密码,说明配置成功
// 登陆自己就可以测试
$ ssh 服务端名称
模仿上述配置,虽然伪分布式只有单节点,也可以配置本地的SSH协议,启动和关闭hadoop就都不需要密码了