1.配置SSH免密登录
说明: 这里演示所用的服务器操作系统是Cent OS 7. 我们的目标是:
A服务器(192.168.140.110) 能免密登录 B服务器 (192.168.140.120).
注意: ssh连接是单向的, A能免密登录B, 并不能同时实现B能免密登录A.
2.安装必需的软件
在操作之前, 先确保所需要的软件已经正常安装.
这里我们需要安装ssh-******和ssh-copy-id, 安装方式如下:
[[email protected] ~]# yum install -y ssh-****** ssh-copy-id
3.ssh-******创建公钥-私钥对
(1)ssh-******常用参数说明:
-t: **类型, 可以选择 dsa | ecdsa | ed25519 | rsa;
-f: **目录位置, 默认为当前用户home路径下的.ssh隐藏目录, 也就是~/.ssh/, 同时默认**文件名以id_rsa开头. 如果是root用户, 则在/root/.ssh/id_rsa, 若为其他用户, 则在/home/username/.ssh/id_rsa;
-C: 指定此**的备注信息, 需要配置多个免密登录时, 建议携带;
-N: 指定此**对的密码, 如果指定此参数, 则命令执行过程中就不会出现交互确认密码的信息了.
(2)举例说明: 同时指定目录位置、密码、注释信息, 就不需要输入回车键即可完成创建:
在指定目录下生成rsa**, 并指定注释为“hexin”, 实现示例:
[[email protected] ~]# ssh-****** -t rsa -f /root/.ssh/id_rsa -N ‘’ -C "hexin"
(2) 前往~/.ssh/目录下查看生成的文件:
#生成的文件以id_rsa开头, id_rsa是私钥, id_rsa.pub是公钥:
[[email protected] ~]# ls ./.ssh/
id_rsa id_rsa.pub
#通过cat命令查看公钥文件:
[[email protected] ~]# cat ./.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCl11mxvyighB7jM4DITvILJQh88b4/2O4hKRLNcr7vs8DC4QOP6WJOtp4BAJ8FK3smJBh4YvGkOD/QlsVwaAnH+MZBZ5rUIC3ayPaUvjh0NaO7tEg5p114aAALMw35vzJE4g6jM/gs+cmgexdt0iIbc/kIsdi5/hYO7jZHjSgnqQL0hKtOiYzKez4RINWt+hPvSosIUKwXIhenk71Vg2aLSoD2cOw1Dzr7Qz3/cSqgZqzln+2Zm6jfIBC9D7glJe5XWpqdcu1XsjtlPue24bnuSfQ6ZRcnXY/g58lKa03VeHyGCo/MNrWYzzI9VdYcI0MfInQVsJzF9s7qxYaz+W2F hexin
#可以看到最后有一个注释内容hexin
4.ssh-copy-id把A的公钥发送给B
4.1 默认用法:
ssh-copy-id [email protected], ssh-copy-id命令连接远程服务器时的默认端口是22, 当然可以指定文件、远程主机的IP、用户和端口:
#指定要拷贝的本地文件、远程主机的IP+用户名+端口号:
[[email protected] ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 [email protected]
The authenticity of host ‘192.168.140.120 (192.168.140.120)’ can’t be established.
ECDSA key fingerprint is d5:d8:7b:ec:cb:e7:0b:0b:46:49:21:ff????55:54:b8.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed – if you are prompted now it is to install the new keys
[email protected]’s password: # 输入密码后, 将拷贝公钥
Number of key(s) added: 1
Now try logging into the machine, with: “ssh -p ‘22’ ‘[email protected]’”
and check to make sure that only the key(s) you wanted were added.
4.2 在A服务器上免密登录B服务器
[[email protected] ~]# ssh 192.168.140.120
Last login: Thu May 28 09:23:36 2020 from 192.168.140.1 # 登录成功????
[[email protected] ~]#
5.扩展说明
5.1 其他方式发送公钥文件
上述4步骤是通过ssh-copy-id工具发送公钥文件的, 当然我们也可以通过其他方式实现:
(1) 将A的公钥文件发给B:
通过scp命令将A服务器的 公钥文件 发送到B服务器的用户目录下, 因为还没有配置成功免密登录, 所以期间需要输入B服务器对应用户的密码:
[[email protected] ~]# scp /root/.ssh/id_rsa.pub [email protected]:/root/.ssh/
id_rsa.pub 100% 387 0.4KB/s 00:00
(2) 在B上创建authorized_keys文件:
[[email protected] ~]# ls /root/.ssh/
id_rsa.pub
#通过A服务器的公钥生成"authorized_keys"文件:
[[email protected] ~]# cat /root/.ssh/id_rsa.pub >>/root/.ssh/authorized_keys
[[email protected] ~]# cat /root/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCl11mxvyighB7jM4DITvILJQh88b4/2O4hKRLNcr7vs8DC4QOP6WJOtp4BAJ8FK3smJBh4YvGkOD/QlsVwaAnH+MZBZ5rUIC3ayPaUvjh0NaO7tEg5p114aAALMw35vzJE4g6jM/gs+cmgexdt0iIbc/kIsdi5/hYO7jZHjSgnqQL0hKtOiYzKez4RINWt+hPvSosIUKwXIhenk71Vg2aLSoD2cOw1Dzr7Qz3/cSqgZqzln+2Zm6jfIBC9D7glJe5XWpqdcu1XsjtlPue24bnuSfQ6ZRcnXY/g58lKa03VeHyGCo/MNrWYzzI9VdYcI0MfInQVsJzF9s7qxYaz+W2F hexin
注意: 上述重定向时使用>>进行追加, 不要用>, 那会清空原有内容.
5.2 文件权限
为了让私钥文件和公钥文件能够在认证中起作用, 需要确保权限的正确性:
① 对于.ssh目录以及其内部的公钥、私钥文件, 当前用户至少要有执行权限, 其他用户最多只能有执行权限.
② 不要图省事设置成777权限: 太大的权限不安全, 而且数字签名也不支持这种权限策略.
③ 对普通用户, 建议设置成600权限: chmod 600 authorized_keys id_rsa id_rsa.pub;
④ 对root用户, 建议设置成644权限: chmod 644 authorized_keys id_rsa id_rsa.pub.
5.3 文件的编辑和查看
在Liunx环境下, 如果要查看、复制私钥、公钥, 以及authorized_keys等文件, 不要使用vim等编辑器打开, 因为它会产生不必要的回车;应该通过cat、more、less等查看命令把内容打印到终端上, 再作查看、复制等操作.
6 常见问题及解决
(1) 问题描述:
通过ssh-copy-id命令拷贝公钥文件之后, 尝试免密登录另一台服务器时发生错误:
权限错误导致免密登录失败
[[email protected] ~]# ssh [email protected]
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for ‘/root/.ssh/id_rsa’ are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /root/.ssh/id_rsa
[email protected]’s password:
(2) 问题原因:
提示信息说明**文件不受保护, 具体是说这里的**文件权限是0644, 而数字签名机制要求**文件不能被其他用户访问(读取), 所以该**文件被强制忽略处理了.
(3) 问题解决:
只要修改该**文件的权限即可:
chmod 600 /root/.ssh/id_rsa
这里/root/.ssh/id_rsa就是warning里给出的**文件名.
参考资料
linux配置ssh免密码登录.
ssh-****** 基本用法.
Linux - 配置SSH免密通信.