让两台甚至多台Linux服务器建立SSH信任关系

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了让两台甚至多台Linux服务器建立SSH信任关系相关的知识,希望对你有一定的参考价值。

引入

为什么要让两台Linux服务器建立信任关系?

因为需要,当我使用scp命令从一台服务器上拷贝文件到另一台服务器上,或者从一台服务器上上传文件到另一台服务器上,都需要输入密码,每执行一次scp命令都需要输入密码,很麻烦,为了解决这个问题,我们让它们建立信任关系,以后就不需要输入密码了。

概述

为了区分两台服务器的身份,分别赋予它们一个叫做本地服务器,一个叫做远程服务器。通常把执行scp命令的服务器叫做本地服务器,而把另外一台叫做远程服务器。

而让它们建立信任关系使用的是一种被称为“公私钥”的认证方式进行SSH登录。

一台本地服务器与一台远程服务器建立信任单方面信任关系

首先,在本地服务器A(即要执行scp命令拷贝上传文件的服务器)上执行如下命令,然后一直按回车键,表示不设置证书密码,将在用户的家目录下的.ssh目录下生成两个文件:私钥证书id_rsa和公钥证书id_rsa.pub

ssh-keygen -t rsa

接着在远程服务器B(即只能被拷贝或被上传文件的服务器)执行如下命令把本地服务器A上的id_rsa.pub公钥证书文件复制到远程服务器B的家目录下的.ssh子目录中:

scp root@192.168.40.90:/root/.ssh/id_rsa.pub /root/.ssh
#参数说明:
# root@192.168.40.90指的是本地服务器A的用户名和IP地址
# :这个冒号是必须的
# /root/.ssh/id_rsa.pub指的是本地服务器A生成的公钥证书文件
# /root/.ssh指的是远程服务器B目录,将本地服务器A生成的公钥证书文件复制到该目录下
# 下面这段话可忽略
# 注意,这里有点绕,因为按照scp命令的语法来说,root@192.168.40.90:/root/.ssh/id_rsa.pub指的是“远程服务器192.168.40.90”上的/root/.ssh/id_rsa.pub,而/root/.ssh才是“本地服务器”,但这是针对scp命令的两个参数来说的,而这里建立信任关系的远程和本地服务器是针对谁执行scp命令来说的。所以本地和远程服务器只是相对的划分。
# 其实可以不执行下面的scp和mv命令,它们的作用就是将本地服务器A上的id_rsa.pub公钥证书文件复制到远程服务器B上的/roo/.ssh子目录下并且重命名为authorized_keys,我们可以直接把本地服务器A上的id_rsa.pub公钥文件的内容复制下来,然后在远程服务器B上的/root/.ssh子目录下新创建一个名为authorized_keys的文件并且将复制的内容写入进去,这就避免了这里的scp命令的执行,也就不会有本地和远程服务器到底是谁的区分了。

然后在远程服务器B执行如下命令将id_rsa.pub文件重命名为authorized_keys

mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys

经过上面两步,我们已经在本地服务器A和远程服务器B之间建立了安全信任关系。

接着我们在本地服务器A进行测试,在本地服务器A执行scp命令从远程服务器B复制文件,也可以从本地服务器A上传文件到远程服务器B,都不需要输入密码了。

即本地服务器A被远程服务器B信任,本地服务器A可以从远程服务器B上复制文件、上传文件到远程服务器B,但远程服务器B并不被本地服务器A所信任,如果远程服务器B要从本地服务器A复制文件或者上传文件到本地服务器A都需要输入本地服务器A的密码。

一台本地服务器与一台远程服务器相互信任

上面说的本地服务器A被远程服务器B信任,是把本地服务器A上生成的公钥证书文件id_rsa.pub放到了远程服务器B的/root/.ssh目录下并且改名为authorized_keys

那么如果想要让远程服务器B被本地服务器A信任,只需要让远程服务器生成公钥证书文件id_rsa.pub,然后将生成的公钥证书文件放到本地服务器A的/root/.ssh目录下并且改名为authorized_keys

所以如果要本地服务器和远程服务器相互信任,只需要让它们都生成公钥证书文件id_rsa.pub,然后放到对方的/root/.ssh目录下并且改名为authorized_keys

这样双方互相信任,复制和上传文件都不需要输入密码了。

就不演示具体如何操作了,只是把上面的操作再来一次就可以了。

一台本地服务器被多台远程服务器信任

假设我们有如下5台服务器:

现在需要将五台服务器都发送一样的文件,服务器少我们可以打开FTP工具一个一个的复制粘贴,但如果服务器不止上面五台呢?那么使用FTP工具复制粘贴的方式很麻烦很耗费时间。

所以我们会考虑写一个脚本来解决这个问题,先将待发送的文件复制到其中一台服务器上,然后执行脚本批量(使用循环)把文件依次复制到其他服务器指定位置上。

我们需要先选一台服务器来放置上传的文件,选任何一台都可以,这里就选服务器A吧。然后在服务器A上执行脚本将指定文件复制到其他的服务器上,但是,我们知道如果两台服务器之间没有建立信任关系的话执行scp命令复制文件就需要输入密码。这里的问题变成了一台对应着多台服务器建立信任关系,也就是如果想要服务器A向服务器B、C、D、E使用scp命令复制文件而不需要输入密码就要同它们建立信任关系,通过上面我们知道只需要将服务器A生成的公钥证书文件id_rsa.pub放到服务器B、C、D、E的/root/.ssh目录下并且改名为authorized_keys就可以了。

具体操作很简单:只是由原来的一个服务器变成了多个服务器。在这里服务器A作为了本地服务器,而服务器B、C、D、E都是远程服务器。

多台本地服务器信任一台远程服务器

如果有多台本地服务器需要向一台远程服务器复制或上传文件,那么该如何建立信任关系呢?

其实也很简单,还是把它们看成一对一就可以了,本地服务器B与远程服务器A建立信任关系、本地服务器C与远程服务器A建立信任关系、本地服务器D与远程服务器A建立信任关系、本地服务器E与远程服务器A建立信任关系。

即在本地服务器B生成公钥证书文件id_rsa.pub然后放到远程服务器A的/root/.ssh目录下并且改名为authorized_keys,这样本地服务器B和远程服务器A就建立了信任关系;接着本地服务器C也生成公钥证书文件id_rsa.pub,但是是在远程服务器A的/root/.ssh目录下的authorized_keys文件的最后一行添上本地服务器C的公钥证书文件内容,因为服务器A的/root/.ssh目录下的authorized_keys文件已经存在,已经同本地服务器B建立了信任关系,如果想要建立新的信任关系必须在authorized_keys文件的最后一行上添加上服务器C的公钥证书文件内容,因为不可能把原有的给覆盖删除掉,同样服务器D、E也是如此操作。

authorized_key文件是可以添加多条公钥证书文件内容的,每一行都是一条。

多台本地服务器与多台远程服务器建立信任关系

就是多台本地服务器和多台远程服务器相互把对方的公钥证书文件id_rsa.pub内容添加到自己的/root/.ssh目录下的authorized_keys文件中,这样双方都相互信任了。

总结

  • 无论是一对多、多对一、还是多对多都是一对一的变种。
  • 建立信任关系很简单,即把对方的公钥证书文件id_rsa.pub内容添加到自己的/root/.ssh目录下的authorized_keys文件中。
  • 这是发生在Linux系统上的情况。
  • 到目前为此,上面这些仅仅是为了每次执行scp等命令而不需要输入密码所做的事情,也就是做这些的目的就是为了在执行scp等命令时不需要输入对方服务器的密码。

以上是关于让两台甚至多台Linux服务器建立SSH信任关系的主要内容,如果未能解决你的问题,请参考以下文章

ssh两台机器建立信任关系无密码登陆

Linux SSH , SCP 建立信任关系(免密传输)

SSH 信任关系建立

批量实现多台服务器之间ssh无密码登录的相互信任关系

linux主机之间建立ssh信任关系

Linux 下实现SSH互信