SSH连接免密码登录配置
方法一:手动复制公钥至服务器
ssh-keygen -t rsa
在客户端生成密钥对- 把公钥拷贝给要登录的目标主机,手动复制粘贴
- 目标主机上将这个公钥加入到授权列表
cat id_rsa.pub >>authorized_keys
- 目标主机还要将这个授权列表文件权限修改为
600
,chmod 600 authorized_keys
- 在用户目录下即
~
执行以下步骤:rm -rf .ssh/
# 会删除已有的密钥,谨慎删除ssh-keygen -t rsa
cat .ssh/id_rsa.pub >> .ssh/authorized_keys
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
这种方法容易出错,推荐使用方法二
方法二:在本地主机(客户端)上生成密钥对,使用 ssh-copy-id
将公钥复制到远程服务器中
- 在本地机器上使用
ssh-keygen
产生公钥私钥对 - 用
ssh-copy-id
将公钥复制到远程机器中。默认:ssh-copy-id
会将Public Key写到远程机器的~/.ssh/authorized_key
文件中 ssh-copy-id
需要输入密码;第一次连接需要输入yes
同意连接- 以后登录到服务器都不用输入密码啦
上述步骤对应命令如下:
1 | $ ssh-keygen # -t rsa 指定RSA加密算法 |
无法将公钥复制添加到服务器 ~/.ssh/authorized_keys
文件中
问题描述:
在执行 cat id_rsa.pub >>authorized_keys
或 ssh-copy-id -i ~/.ssh/login2bwg.pub root@2001:470:c:1ab0::2 -p 26885
将公钥添加到服务器时报错❌:即使是使用sudo仍然没有权限修改文件内容
1 | $ sudo cat id_rsa.pub >> authorized_keys |
解决方法:
通过 lsattr
命令发现文件受保护禁止任何编辑,有i
输出,使用 chattr -i
命令删除保护属性
1 | root@brave-post-2:~/.ssh# lsattr authorized_keys |
PS: 关于lsattr
和chattr
命令的简单用法。
(1) 用chattr命令防止系统中某个关键文件被修改$ chattr +i /etc/resolv.conf
然后用 mv /etc/resolv.conf 等命令操作于该文件,都是得到 Operation not permitted 的结果。
vim编辑该文件时会提示W10: Warning: Changing a readonly file错误。要想修改此文件就要把i属性去掉:chattr -i /etc/resolv.conf
使用 lsattr 命令来显示文件属性:lsattr /etc/resolv.conf
输出结果为:----i-------- /etc/resolv.conf
(2) 让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:chattr +a /var/log/messages
已经配置好了公钥私钥,Ubuntu服务器仍然要求输入密码才能进行ssh登录
出现这个问题的原因是远程服务器上的sshd服务没有配置好,我用的Ubuntu 18.04默认配置是关闭使用私钥登录的,需要修改配置文件。
在Ubuntu服务器上打开配置文件:
sudo vi /etc/ssh/sshd_config
修改配置如下:
1 | #禁用root账户登录,如果是用root用户登录请开启 |
最后重启SSH的服务 sudo service sshd restart
即刻生效。
再次ssh连接至服务器,此时已经不用输入密码即刻登录,如下图所示: