1、背景
最近在做项目迁移的过程,需要把数据库备份文件迁移到一台单独的linux服务器中,需要使用ssh两台服务器免登录,所遇到的问题,做一个记录总结!
2、服务器A中生成公钥
[root@localhost .ssh]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:eLxxERqm1GRduIekxtByYNZhLX39uXVoDFM6DwCChTA root@linkmore2
The key's randomart image is:
+---[RSA 3072]----+
| E. +B*O*oo.o. |
| .o+o**o*o+.. |
| .=.+.+++ o.|
| o+ o..++.+|
| ..S .. .. +|
| . + . |
| . |
| |
| |
+----[SHA256]-----+
[root@localhost .ssh]# cd /root/.ssh
[root@localhost .ssh]# ls
id_rsa id_rsa.pub known_hosts
3、将公钥传递到服务器B中
[root@linkmore2 .ssh]# ssh-copy-id 192.168.1.243
-bash: ssh-copy-id: 未找到命令
提示找不到命令,于是百度了一通,但都是重新安装openssh,找了好久中找到下面这段:
1.没有安装ssh客户端,可使用命令安装yum install -y openssh-clients*或apt get install openssh-clients*
2.如果是升级openssh服务器版本导致ssh-copy-id程序消失,可是使用以下命令实现ssh-copy-id 的效果
cat ~/.ssh/id_rsa.pub | ssh ,<目标服务器IP地址> "umask 077; mkdir -p .ssh ; cat >> .ssh/authorized_keys"
[root@localhost.ssh]# cat ~/.ssh/id_rsa.pub | ssh 192.168.1.243 "umask 077; mkdir -p .ssh ; cat >> .ssh/authorized_keys"
root@192.168.1.243's password:
bash: .ssh/authorized_keys: 权限不够
执行之后,提示权限不够,于是在服务器B中查看文件的权限
ssh公钥生效需满足至少下面两个条件:
1) .ssh目录的权限必须是700
2) .ssh/authorized_keys文件权限必须是600
在服务器B中执行提示不允许的操作
[root@localhost .ssh]# chmod 600 /root/.ssh/authorized_keys
chmod: 更改"/root/.ssh/authorized_keys" 的权限: 不允许的操作
[root@localhost .ssh]# ll
总用量 8
-rw-r--r--. 1 root root 396 3月 21 2020 authorized_keys
-rw-r--r--. 1 root root 515 7月 30 2020 known_hosts
最终发现是Linux系统设置了重要文件的自我保护
在linux系统下有些配置文件是不允许被任何人(包括root)修改的
为了防止被误修改或删除
可以设定该文件的不可修改位:immutable
解决办法 :chattr
防止关键文件被修改:
chattr +i authorized_keys
如果需要修改文件则:
chattr -i authorized_keys
[root@linkmore2 .ssh]# cat ~/.ssh/id_rsa.pub | ssh 192.168.1.243 "umask 077; mkdir -p .ssh ; cat >> .ssh/authorized_keys"
root@192.168.1.243's password:
[root@linkmore2 .ssh]#
至此配置免密登录成功!