Background
首先说下,为什么网上相关经验已经多如牛毛,我还要自己再写呢?
起因是自己配置的时候,去网上找了好多篇经验,很多基本都是一个思路,只是贴步骤,只知其然,不知其所以然,试了好多篇也没成功。
自己总结下,以后自己使用方便。
1、实现目标
- 当我们需要远程登录一台linux服务器时,通常使用ssh(基于openssh),一般都默认装的有吧,没有先安装这个服务,这个就像向日葵一样。
- 使用ssh一般默认需要输入密码
- 我们就是为了实现免密登录,即ssh远程登录某台服务器时不再输入密码。所以我们需要事先和这台服务器配置免密登录。
2、实现思路
ssh-keygen
是为ssh生成、管理和转换认证密钥的工具,它支持rsa和dsa两种认证密钥,默认rsa加密。- 首先需要修改
你要远程免密登录的目标服务器
的远程连接配置sshd_config
。- 使用
ssh-keygen
生成公钥和私钥文件(默认在 ~/.ssh 目录,id_rsa.pub文件是公钥文件,另一个id_rsa是私钥文件)。- 然后使用
ssh-copy-id
把生成的公钥拷贝到你要远程免密登录的目标服务器
上。就可以了。
3、实现步骤
这里以本机wlf远程连接
yl-test
为目标服务器(root用户)进行示例说明。
- 修改目标服务器yl-test的配置文件
/etc/ssh/sshd_config
# 允许root账户远程登录
PermitRootLogin yes
# 关闭严模式
StrictModes no
# 允许密钥登录
RSAAuthentication yes
PubkeyAuthentication yes
# 公钥数据存放文件
AuthorizedKeysFile .ssh/authorized_keys
- 重启yl-test的sshd服务
systemctl restart sshd.service
- 在本机wlf(我这里是window,使用的git bash)生成密钥(四次回车即可)
ssh-keygen
- 在本机wlf拷贝公钥到目标服务器
ssh-copy-id root@yl-test
- 在本机wlf远程免密登录测试(直接登录上了,不需要输入密码算是成功)
ssh root@yl-test
4、注意
- 使用下面的命令可以查看远程连接时的详细信息。
# 在服务器端
tail -f /var/log/secure
- 或
# 在客户端
ssh -vvv remote_user@remote_ip
- 如果在拷贝公钥过程中出现“Agent admitted failure to sign using the key”异常,执行如下命令
ssh-add ~/.ssh/id_rsa
- 如果遇到文件权限问题,如下图所示,执行下面的命令修改文件权限。
chmod 600 /root/
chmod 700 /root/.ssh/