linux配置ssh互信
什么叫linux主机互信:
Linux主机互信,就是主机之间相互信任,什么是信任,就像人与人之间一样,不需要利用金钱等(除了你自己以外其他的东西)来取得对方的信任,大家相互信任对方,不需要额外的凭证。就好比你,你爸,你妈,你姐之间,不需要钱来维持你们之间的信任。同样,linux主机之间也是,我们从一台主机登陆到另一台时,往往需要验证你,需要你输入用户密码,才允许你登陆。这样在多台机器之间来回切换登陆就会频繁输入密码,非常麻烦,看看,一切的根源来自于互不信任。可不可以不用输入密码就直接登陆呢?答案是可以,但条件是主机之间相互信任对方。
因此ssh互信就诞生了。我们在主机值之间配置了公钥认证后,也就是取得信任之后,就不必再输入密码了(当然实际上是ssh使用rsa算法帮你完成了验证过程)。
公钥认证的基本思想:
对信息的加密和解密采用不同的key,这对key分别称作private key和publickey,其中,public key存放在欲登录的服务器上,而privatekey为特定的客户机所持有。当客户机向服务器发出建立安全连接的请求时,首先发送自己的public key,如果这个public key是被服务器所允许的,服务器就发送一个经过public key加密的随机数据给客户机,这个数据只能通过private key解密,客户机将解密后的信息发还给服务器,服务器验证正确后即确认客户机是可信任的,从而建立起一条安全的信息通道。通过这种方式,客户机不需要向外发送自己的身份标志“private
key”即可达到校验的目的,并且private key是不能通过public key反向推断出来的。这避免了网络窃听可能造成的密码泄露。客户机需要小心的保存自己的private key,以免被其他人窃取,一旦这样的事情发生,就需要各服务器更换受信的publickey列表。
使用过github的用户就会知道,用git登陆远程仓库github的时候,也会有公钥认证(当然是首次使用git时),首次使用git,就会要求你在客户端生成一个rsa key pairs,一个public-key存放于id_rsa.pub,一个private-key存放于id_rsa,并且上传你的公钥public-key到github上,这样做的目的就是你可以取得github的信任,也就是github信任你,下次你登录的时候,github会使用你上传的公钥来验证你的身份,从而不用输入密码。当然这个过程只是单向的信任,也就是github现在信任你,但是你并没有建立对github的信任,需要建立么,其实没有必要,因为github是不会主动向你发出请求的,大多数情况是你需要主动向github发送请求。
知道了单向信任,那么相互信任就简单了,就是主机之间的公钥都要告知对方,这样才能相互信任,你信任我,我信任你。那么,以下就是互信建立的步骤了:
配置ssh互信的步骤如下:
1. 首先,在要配置互信的机器上,生成各自的经过认证的key文件;
2. 其次,将所有的key文件汇总到一个总的认证文件中;
3. 将这个包含了所有互信机器认证key的认证文件,分发到各个机器中去;
4. 验证互信。
在主机名为node1,node2,node3上以相同的用户test创建ssh互信。
1.在每个节点上创建 RSA密钥和公钥
使用test用户登陆
mkdir~/.ssh
chmod700 ~/.ssh
cd~/.ssh
ssh-keygen-t rsa
2.整合公钥文件
在node1上执行以下命令
sshnode1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
sshnode2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
sshnode3 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod600 ~/.ssh/authorized_keys
3.分发整合后的公钥文件
在node1上执行以下命令
scp~/.ssh/authorized_keys node2:~/.ssh/
scp~/.ssh/authorized_keys node3:~/.ssh/
4.测试ssh互信
在各个节点上运行以下命令,若不需要输入密码就显示系统当前日期,就说明SSH互信已经配置成功了。
sshnode1 date
sshnode2 date
sshnode3 date
一下是我的实验
[[email protected] .ssh]$ ssh-keygen-t rsa
Generating public/private rsa key pair.
Enter file in which to save the key(/home/ocdc/.ssh/id_rsa):
/home/ocdc/.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/home/ocdc/.ssh/id_rsa.
Your public key has been saved in/home/ocdc/.ssh/id_rsa.pub.
The key fingerprint is:
b3:e7:19:4b:e1:59:0d:b5:4d:ba:04:89:81:9d:37:[email protected]
The key‘s randomart image is:
+---[RSA 2048]----+
| oE=oo. .|
| . + +o = |
| ...+ .|
| + . |
| S . . o |
| + + |
| . * |
| + + |
| + |
+-----------------+
然后在各个需要互信的接口机上重复以上步骤生成认证文件
回到接口机1,
[[email protected] .ssh]$ ssh10.31.100.21 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[email protected]‘s password:
[[email protected] .ssh]$ ssh10.31.100.22 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[email protected]‘s password:
[[email protected] .ssh]$ ssh10.31.100.23 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[email protected]‘s password:
[[email protected] .ssh]$ ssh10.31.100.24 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[email protected]‘s password:
[[email protected] .ssh]$ catauthorized_keys
可以看到所有主机的公钥都存在了authorized_keys中。接下来就是分发这个整合后的证书了。
[[email protected] .ssh]$ scp~/.ssh/authorized_keys 10.31.100.21:~/.ssh/
[email protected]‘s password:
authorized_keys 100% 3219 3.1KB/s 00:00
[[email protected] .ssh]$ scp~/.ssh/authorized_keys 10.31.100.22:~/.ssh/
[email protected]‘s password:
authorized_keys 100% 3219 3.1KB/s 00:00
[[email protected] .ssh]$ scp~/.ssh/authorized_keys 10.31.100.23:~/.ssh/
[email protected]‘s password:
authorized_keys 100% 3219 3.1KB/s 00:00
[[email protected] .ssh]$ scp~/.ssh/authorized_keys 10.31.100.24:~/.ssh/
[email protected]‘s password:
authorized_keys 100% 3219 3.1KB/s 00:00
任务完成,验证是否成功
[[email protected] .ssh]$ ssh10.31.100.21 date
Wed May 27 20:39:39 CST 2015
[[email protected] .ssh]$ ssh10.31.100.22 date
Wed May 27 20:39:45 CST 2015
[[email protected] .ssh]$ ssh10.31.100.23 date
Wed May 27 20:39:51 CST 2015
[[email protected] .ssh]$ ssh10.31.100.24 date
Wed May 27 20:39:55 CST 2015