ssh免密登陆
SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题
ssh口令验证登录
ssh user@ip
执行上面的命令,接下来输入登录密码就可以完成登录。
这种方式登录时,ssh进行口令验证的一个流程为:
- 客户端与服务器建立上连接,服务器将自己的公钥传给客户端
- 客户端拿到服务器的公钥后,将登陆密码用公钥加密后传给服务器
- 服务器拿到加密后的登陆密码后,用自己的私钥解密登陆密码,密码验证通过后则允许客服端登陆
由于登陆过程中的数据传输都被加密,用这种方式远程登陆是相对安全的。但是这种方式不能保证正在连接的服务器是自己想要连接的服务器,可能会受到”中间人”攻击,即有别的服务器冒充真正的服务器。
ssh密钥登陆
- 首先客户端生成自己的公钥和私钥:
ssh-keygen -t rsa
在客户端用户目录下可以看到一个.ssh/文件夹,其中id_rsa就是私钥,id_rsa.pub是公钥,known_hosts记录已知的公钥清单。
- 服务器端需要在
.ssh/文件夹下创建authorized_keys文件,将客户端的公钥追加到服务器端的authorized_keys文件中:
scp -p ~/.ssh/id_rsa.pub user@ip:/home/user/.ssh/authorized_keys
或者直接将公钥中的内容拷贝到authorized_keys文件中
- 服务器端的文件权限:
authorized_keys文件权限至少为600(可读写):
chmod 600 authorized_keys
.ssh目录权限至少为700(可读写执行):
chmod 700 -R .ssh
配置完成后就可以进行免密连接了:
ssh user@ip [-p[port]]
或者进一步配置config文件(没有的话就新建一个):
Host 别名
HostName 主机名
Port 端口
User 用户名
IdentityFile 私钥路径
可以按照以上写法同时配置多个ssh会话。
配置完成后就可以方便的进行免密登陆:
ssh 别名
这种登陆方式的流程是:
- 客户端向服务器端发送请求,将自己的公钥发送给服务器
- 服务器收到请求后,在主目录下寻找客户端的公钥,并与发送过来公钥对比,如果一致,则用公钥加密”质询”(challenge)并发送给客户端
- 客户端收到”质询”后,就可以用自己的私钥解密”质询”,再发送给服务器
- 服务器验证”质询”通过后,就允许客户端登陆
这种密钥验证的方式可以避免”中间人攻击”(因为他没有你的私钥)。