Linux 免密登录
概述
其他机器需要通过 ssh 连接某台 Linux,除了可以通过密码进行连接外;还可以使用公钥或者私钥的方式进行
相对于密码的方式,后者安全性更好一些,且不需要重复输入密码,即所谓免密登录
原理
- RSA 加密算法 RSA 算法原理(一) - 阮一峰的网络日志
步骤
前置步骤
开启 ssh 服务
linux
- 确保被连接机器上的 ssh 处于开启状态
- 终端输入 sudo service ssh status

- 看到 active(running) 说明服务正常
- 终端输入 sudo service ssh status
生成密钥对
Linux
要生成 rsa 密钥对,只需要打开要被连接的 Linux 终端
键入
ssh-keygen
即可,期间出现的几个选项都可以按回车保持默认值
然后
ls ~/.ssh
可以看到生成的若干文件
id_rsa: 生成的私钥文件
id_rsa.pub: 生成的公钥文件
known_hosts: 已知主机的指纹文件,用于防范中间人攻击 What is known_hosts File in Linux [Everything to Know]
authorized_keys: 这个文件需要用到时手动创建,文件用于控制,哪些公钥被允许连接到这台机器上
复制 id_rsa.pub 里面的内容,即是我们需要的公钥,下一步需要用到
Windows
与 Linux 步骤类似,不同的是,生成的文件存放在了 %HOMEPATH%/.ssh 而已
使用私钥登录
在目标机器上
- 执行密钥对生成
- 将公钥复制进 authorized_keys
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
# 或将id_rsa.pub的内容手动拷贝到authorized_keys末尾处
在发起连接的机器上
- 拿到目标机器的私钥(~/.ssh/id_rsa)
- 测试 ssh -i 私钥路径 用户名 @ 主机名,如
ssh -i id_rsa root@192.168.1.11
使用公钥登录
在发起连接的机器上
复制.ssh 目录的 id_rsa.pub 公钥文件的内容
在目标机器上
authorized_keys 文件用于控制,哪些公钥被允许连接到这台机器上
假设上一步复制的公钥是 ssh-rsa fsdfsdfsdfsdf [email protected]
如果要允许一个公钥连接到这台机器,可以使用以下命令
对于 Linux
cd ~/.ssh
echo "ssh-rsa fsdfsdfsdfsdf [email protected]" >> authorized_keys
对于 Windows
进入目录 %HOMEPATH%/.ssh,打开或者新建文件 authorized_keys,在文件末尾加入公钥字符串
ssh-rsa fsdfsdfsdfsdf root@192.168.1.11
测试
经过如上操作,可以尝试进行连接测试了
假设被连接机器的用户名是 root , 机器 IP 是 192.168.1.11
ssh root@192.168.11
不出报错就意味着连接成功了
扩展
ssh 免密登录实现后,可以更方便的进行远程连接开发,详见文档远程开发环境搭建