Linux 之 ssh 免密登陆
背景
为了让两个linux机器之间使用ssh不需要用户名和密码。所以采用了数字签名RSA或者DSA来完成这个操作。
场景分析
假设 A (192.168.20.59)为客户机器,B(192.168.20.60)为目标机。
要达到的目的:
A机器ssh登录B机器无需输入密码;
加密方式选 rsa|dsa均可以,默认dsa
ssh-keygen -t rsa #使用rsa加密
具体操作流程
单向免密登陆(能满足上边的目的):
登录A机器,生成 A 机器的公钥。 使用命令
ssh-keygen -t [rsa|dsa]
,然后一直按回车,最后将会生成密钥文件和私钥文件id_rsa,id_rsa.pub
或id_dsa,id_dsa.pub
将公钥复制到 B 机器,有两种方式:
- 将 .pub 文件复制到B机器的 .ssh 目录, 并 cat id_dsa.pub >> ~/.ssh/authorized_keys
- 使用
ssh-copy-id 用户名@10.0.0.1
设置文件和目录权限:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 设置authorized\_keys权限
$ chmod 600 authorized\_keys
# 设置.ssh目录权限
$ chmod 700 -R .ssh
4. 完成;(直接运行 `ssh 192.168.20.60`)
### 双向免密登陆
1. 两个节点都执行操作:`ssh-keygen -t [rsa|dsa]` 然后全部回车,采用默认值.
2. 这样两个节点都生成了一对密钥,存放在各自用户目录的~/.ssh下。将公钥考到对方机器的用户目录下,并将其复制到~/.ssh/authorized_keys中(操作命令:`cat id\_dsa.pub >> ~/.ssh/authorized\_keys`)。
3. 设置文件和目录权限:设置authorized_keys权限
$ chmod 600 authorized_keys
设置.ssh目录权限
$ chmod 700 -R .ssh
1
2
3
4
4. 要保证.ssh和authorized\_keys都只有用户自己有写权限。否则验证无效。
其实仔细想想,这样做是为了不会出现系统漏洞。提示错误如下:
he authenticity of host ‘slave1.hadoop (10.122.104.78)’ can’t be established.
ECDSA key fingerprint is SHA256:HtONnJHkgp1aQ6xhiqGR0IHwxWauxJ7dMz0nwHQr6d4.
ECDSA key fingerprint is MD5:09:7d:1c:12:86:48:38:37:f6:a9:b4:b1:d4:01:70:1c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘slave1.hadoop,10.122.104.78’ (ECDSA) to the list of known hosts.
## ssh免密登录配置无效失败原因
ssh免密登录配置无效失败原因的汇总分析。多数情况下,可以登录成功。但是也会出现配置不正确,导致失败的时候。
1. 检查authorized_keys文件权限,并设置为700
`chmod 700 authorized_keys`
2. 检查/etc/ssh/sshd_config文件
将 `#StrictModes yes` 设置为`StrictModes no`
## 注意事项
1. 文件和目录的权限千万别设置成chmod 777.这个权限太大了,不安全,数字签名也不支持。
2. 生成的rsa/dsa签名的公钥是给对方机器使用的。这个公钥内容还要拷贝到对方机器~/.ssh/authorized\_keys 文件中
## 几个文件的作用说明
### ~/.ssh/identity
该用户默认的 RSA1 身份认证私钥(SSH-1)。此文件的权限应当至少限制为"600"。
生成密钥的时候可以指定采用密语来加密该私钥(3DES)。
[ssh](http://www.openbsd.org/cgi-bin/man.cgi?query=ssh)将在登录的时候读取这个文件。
### ~/.ssh/identity.pub
该用户默认的 RSA1 身份认证公钥(SSH-1)。此文件无需保密。
此文件的内容应该添加到所有 RSA1 目标主机的 ~/.ssh/authorized\_keys 文件中。
### ~/.ssh/id\_dsa
该用户默认的 DSA 身份认证私钥(SSH-2)。此文件的权限应当至少限制为"600"。
生成密钥的时候可以指定采用密语来加密该私钥(3DES)。
[ssh](http://www.openbsd.org/cgi-bin/man.cgi?query=ssh)将在登录的时候读取这个文件。
### ~/.ssh/id\_dsa.pub
该用户默认的 DSA 身份认证公钥(SSH-2)。此文件无需保密。
此文件的内容应该添加到所有 DSA 目标主机的 ~/.ssh/authorized\_keys 文件中。
### ~/.ssh/id\_rsa
该用户默认的 RSA 身份认证私钥(SSH-2)。此文件的权限应当至少限制为"600"。
生成密钥的时候可以指定采用密语来加密该私钥(3DES)。
[ssh](http://www.openbsd.org/cgi-bin/man.cgi?query=ssh)将在登录的时候读取这个文件。
### ~/.ssh/id\_rsa.pub
该用户默认的 RSA 身份认证公钥(SSH-2)。此文件无需保密。
此文件的内容应该添加到所有 RSA 目标主机的 ~/.ssh/authorized\_keys 文件中。
### ~/.ssh/known_hosts
A通过ssh首次连接到B,B会将公钥1(host key)传递给A,A将公钥1存入known_hosts文件中,以后A再连接B时,B依然会传递给A一个公钥2,OpenSSH会核对公钥,通过对比公钥1与公钥2 是否相同来进行简单的验证,如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。。
Linux 之 ssh 免密登陆
https://flepeng.github.io/002-Linux-Linux-之-ssh-免密登陆/