简述
默认情况下, ssh使用密码登录方式, 这种方式由很多缺点, 例如明文密码很容易被不法分子获取, 如果存在大量机器, 密码的管理也是一个很大的问题, 并且每次登录都需要手动输入密码. 不管是对于操作者还是管理者, 都是很麻烦的一件事. 而使用密钥登录就是一个更好的解决方案
加密算法
目前加密算法大致有两种: 一种是对称加密, 另一种是非对称加密. 对称加密顾名思义就是说通信双方使用的密钥是一样的, 优点就是加密速度快, 缺点也很明显, 当某端密钥被破解, 那另一端的加密数据也会被破解.
另一种非对称加密的算法安全系数就大大增强, 非对称加密算法分别对应的有公钥, 私钥, 两个密钥. 私钥必须私密保存, 不能泄露; 公钥则是公开的, 可以对外发送. 通常使用公钥加密数据, 使用私钥进行解密, 并且因为非对称加密的公私钥都是成对的, 所以就算密文和公钥都被不法分子获取, 也没办法解开密文, 而私钥不仅仅用来解密数据, 在通信过程中, 通常会使用私钥对数据签名, 然后使用公钥验签.
在一个网络请求中, 通常会先进行公钥验签确认对方身份, 验签通过后才会使用密钥解开密文, 进行通信.
生成公私钥对
在ssh登录中, 就是使用非对称加密算法生成的密钥进行的认证
下面的命令会使用rsa算法生成一个密钥对
ssh-keygen -t rsa
ssh-keygen的配置项, 主要有一下这些
- -b 参数执行密钥的二进制位数, 这个参数越大, 密钥就越难被破解, 但是相对应的进行加解密过程的计算量就会越大
- -C 参数可以为密钥文件执行注释, 通常被设定为个人邮箱, 例如: ssh-keygen -t rsa -C zhangsan@qq.com
- -f 参数执行生成的私钥文件, 如果没有特殊需要, 并不需要指定
- -F 参数检查某个主机名是否存在于known_hosts中
- -N 参数用于指定私钥的密码, 如果设置了密码, 入侵者即时拿到了私钥, 还是需要密钥才能破解, 这样更加安全, 但是管理和使用成本也会增加, 看个人情况使用
- -P 参数用于重新指定私钥的密码
- -R 参数将执行的主机公钥指纹移出known_hosts文件
- -t 参数指定生成密钥的算法, 常使用的加密算法为rsa和dsa
配置密钥登录
openssh规定, 用户的公钥必须保存在服务器的~/.ssh/authorized_keys文件. 你要以哪个用户登录, 就保存在哪个用户的主目录下. 当存在多个公钥时, 每个公钥占一行, 如果文件不存在, 需要手动创建
设置权限
chmod 644 ~/.ssh/authorized_keys