一、serverA 免密登录 serverB 原理
- 首先在 serverA 上生成一对秘钥(ssh-keygen);
- 将公钥拷贝到 serverB,重命名 authorized_keys
serverA 向 serverB 发送一个连接请求,信息包括用户名、ip; - serverB 接到请求,会从 authorized_keys 中查找,是否有相同的用户名、ip,如果有 serverB 会随机生成一个字符串
然后使用公钥进行加密,再发送个 serverA; - serverA 接到 serverB 发来的信息后,会使用私钥进行解密,然后将解密后的字符串发送给 serverB;
- serverB 接到 serverA 发来的信息后,会给先前生成的字符串进行比对,如果一直,则允许免密登录;
二、Centos7 默认安装了 ssh服务
三、serverA 生成秘钥,遇到提示直接敲回车即可
CentOS7 默认使用RSA加密算法生成密钥对,保存在~/.ssh目录下的id_rsa(私钥)和id_rsa.pub(公钥)。也可以使用“-t DSA”参数指定为DSA算法,对应文件为id_dsa和id_dsa.pub,
密钥对生成过程会提示输入私钥加密密码,可以直接回车不使用密码保护。
[root@localhost ~]# ssh-keygen Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
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:/gGrlDJN5euMS5aai5feBkEI/0WjEnzPzx1xGtdkKG4
root@localhost.localdomainThe key’s randomart image is:
±–[RSA 2048]----+
|.o… o +o |
| .o.oo . + +… |
| oo.o. … B |
| o…oo E |
| …oSo . |
| .o +o+. |
| ooB + . |
| .oX.= . . |
| .o=o=.o . |
±—[SHA256]-----+
[root@localhost ~]#
四、移动 id_rsa.pub 文件
将 serverA ~/.ssh目录中的 id_rsa.pub 这个文件拷贝到你要登录的 serverB 的~/.ssh目录中
scp ~/.ssh/id_rsa.pub 192.168.0.101:~/.ssh/
然后在 serverB运行以下命令来将公钥导入到~/.ssh/authorized_keys这个文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
将~/.ssh目录下文件权限设置成600(在远程服务器上设置)
chmod 600 ~/.ssh/*
将~/.ssh 文件夹权限设置成700
chmod 700 ~/.ssh
将家目录权限设置成700
chmod 700 $HOME
五、配置别名登录
$ vim ~/.ssh/config
按照下面的格式写配置文件
Host node1
HostName 121.40.xxx.xxx
User root
IdentityFile ~/.ssh/[秘钥名] Host node2
HostName 120.41.xxx.xxx
User root
IdentityFile ~/.ssh/[秘钥名]
第六步、测试
ssh node1
如果出现如下图所示的异常,执行下边的命令:
chmod 600 ~/.ssh/id_rsa ~/.ssh/id_rsa.pub
如果出现如下图的异常, 分别执行下边的代码:
eval `ssh-agent`
ssh-add