当前位置: 首页 > 科技观察

如何实现两台服务器之间免密码传输数据和操作

时间:2023-03-20 20:01:15 科技观察

我们知道,如果要向远程服务器传输数据和操作,必须输入用户名和密码才能远程登录服务器,或者使用FTP等需要权限控制的协议。但是,如果两台服务器之间的软件需要通信和数据传输,比如Hadoop集群中机器之间的互访,是不是每次都要输入用户名和密码?很麻烦吗?下面介绍SSH来解决这个问题(不是JAVA中的SSH概念)SSH是一种计算机间加密登录的网络协议。如果用户从本地计算机使用SSH协议登录到另一台远程计算机,我们可以认为这次登录是安全的,即使中途被拦截,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被拦截,内容毫无疑问就会暴露。1995年,芬兰学者TatuYlonen设计了SSH协议,将所有登录信息加密,成为互联网安全的基本解决方案。它迅速在全球推广,现已成为Linux系统的标准配置。需要指出的是,SSH只是一种协议,其实现有多种,既有商业的,也有开源的。本文的实现是OpenSSH,它是免费软件,应用广泛。另外,本文仅讨论SSH在LinuxShell中的使用。如果要在Windows系统中使用SSH,就要用到另外一个软件PuTTY,它需要在Hadoop运行过程中管理远程的Hadoopdaemon进程。Hadoop启动后,NameNode通过SSH(SecureShell)启动和停止各个DataNode。一种守护进程。因此,我们需要配置SSH使用passwordless公钥认证,让NameNode使用SSH免密码登录,并启动DataName进程。同样的原理,在DataNode上也可以使用SSH免密码登录NameNode。装机总结一下网友和自己的经验吧。环境CentOS7.0install yuminstallsshinstallSSH协议yuminstallrsync(rsync是一个远程数据同步工具,可以通过LAN/WAN在多台主机之间快速同步文件)servicesshdrestartstartserviceviewinstallrpm–qa|grepopensshrpm–qa|greprsync为了避免麻烦,必须安装在每台服务器上。配置Master无需密码即可登录所有Salve,包括公钥和私钥,然后将公钥复制到所有Slave。当Master通过SSH连接到Salve时,Salve会生成一个随机数并用Master的公钥对该随机数进行加密,发送给Master。Master收到加密后的数字后,用私钥对其进行解密,并将解密后的数字返回给Slave。Slave确认解密后的号码无误后,允许Master连接。这是一个公钥认证过程,用户不需要手动输入密码。重要的过程是将客户端Master复制到Slave。2)在Master机器上生成密码对在Master节点上执行如下命令:ssh-keygen–trsa–P''这个命令是生成它的无密码密钥对,直接回车时使用默认路径询问其存储路径。生成的密钥对:id_rsa和id_rsa.pub,默认存放在“/home/hadoop/.ssh”目录下(每个服务器看到自己的生成路径信息,因为hadoop是用户名,所以在当前用户下生成姓名)。检查“/home/hadoop/”下是否有“.ssh”文件夹,“.ssh”文件下是否有两个新生成的无密码密钥对。然后在Master节点上做如下配置,将id_rsa.pub添加到授权密钥中。cat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys在验证之前,需要做两件事。首先是修改“authorized_keys”文件的权限(权限设置很重要,因为安全设置不安全会导致你无法使用RSA功能),另外就是使用root用户设置“/etc/ssh/sshd_config”。使其对无密码登录有效。1)修改文件“authorized_keys”chmod600~/.ssh/authorized_keys备注:如果不设置,验证时会提示输入密码。找了将近半天的时间才找到这里的原因。2)设置SSH配置以root用户登录服务器修改SSH配置文件“/etc/ssh/sshd_config”的如下内容。RSAAuthenticationyes#启用RSA认证PubkeyAuthenticationyes#启用公钥私钥配对认证方式AuthorizedKeysFile.ssh/authorized_keys#设置公钥文件路径后(与上面生成的文件相同)记得重启SSH服务使设置生效.servicesshdrestart退出root登录,使用Hadoop普通用户验证是否成功。sshlocalhost从上图知道无密码登录级别已经设置好了,接下来就是将公钥复制到所有Slave机器上了。使用如下命令格式复制公钥:scp~/.ssh/id_rsa.pubremoteusername@remoteserverIP:~/例如:scp~/.ssh/id_rsa.pubhadoop@192.168.1.3:~/above该命令是将文件“id_rsa.pub”复制到“/home/hadoop/”,其中服务器IP为“192.168.1.3”,用户为“hadoop”。下面是IP为“192.168.1.3”的Slave1.Hadoop节点的配置。1)复制Master.Hadoop上的公钥到Slave1.Hadoop由上图我们知道传递了文件“id_rsa.pub”,因为没有建立无密码连接,所以在连接的时候,还是会提示输入Slave1.Hadoop服务器用户hadoop的密码。为确保该文件确实已传输,使用SecureCRT登录Slave1.Hadoop:192.168.1.3服务器,查看“/home/hadoop/”下是否存在该文件。由上可知,我们已经成功复制了公钥。2)不必在“/home/hadoop/”下创建“.ssh”文件夹。如果Slave1.Hadoop的“/home/hadoop”已经存在,则不需要创建,因为之前我们没有在Slave机器上做过无密码登录配置,所以不存在这个文件。使用以下命令创建它。(备注:如果使用hadoop登录系统,如果不涉及修改系统文件,一般使用我们之前创建的普通用户hadoop执行命令)mkdir~/.ssh然后修改用户权限文件夹“.ssh”,修改他的权限为“700”,执行以下命令:chmod700~/.ssh注意:如果没有,即使你按照前面的操作设置了“authorized_keys”权限,配置“/etc/ssh/sshd_config",并重启sshd服务。在Master上可以使用“sshlocalhost”免密码登录,但是登录Slave1.Hadoop还是需要输入密码,因为“.ssh”文件夹权限设置错误。当配置SSH无密码登录时系统自动生成这个文件夹“.ssh”时,权限自动为“700”。如果是手动创建的,它有组权限和其他权限,会导致RSA无密码远程访问。登录失败。对比上面两张图,发现文件夹“.ssh”的权限发生了变化。3)追加授权文件“authorized_keys”至此,Master.Hadoop的公钥也有了,文件夹“.ssh”也有了,权限也修改了。这一步是将Master.Hadoop的公钥附加到Slave1.Hadoop的授权文件“authorized_keys”中。使用以下命令追加修改“authorized_keys”文件权限:cat~/id_rsa.pub>>~/.ssh/authorized_keyschmod600~/.ssh/authorized_keys4)使用root用户修改“/etc/ssh/sshd_config”具体步骤参考之前Master.Hadoop的《设置SSH配置》,分为两步:第一是修改配置文件;二是重启SSH服务。5)使用Master.Hadoop使用SSH免密码登录Slave1.Hadoop。前面的步骤设置完成后,你就可以使用如下命令格式,使用SSH免密码登录了。sshremoteserverIP从上图来看,我们主要有3个地方,第一个是SSH无密码登录命令,第二个和第三个是登录前后“@”后面的机器名发生了变化,从“Master”变成了“Slave1””,这意味着我们已经成功实现了SSH无密码登录。最后记得删除“/home/hadoop/”目录下的“id_rsa.pub”文件。rm–r~/id_rsa.pub至此,我们通过前5步实现了从“Master.Hadoop”到“Slave1.Hadoop”的无密码登录。下面就是重复上面的步骤来配置剩下的Slave服务器。这样我们就完成了“配置Master免密码登录所有Slave服务器”。