配置ssh免密登录

发布时间 2023-04-08 19:41:36作者: 来个煎饼

配置ssh免密登录是为了将配置好的应用或文件直接分发到其他节点,不然 一台一台的配置太慢了。

1 在每台主机上生成公钥和私钥

在所有节点上运行如下命令,运行完成后会在用户家目录下的.ssh目录下生成id_rsa(私钥文件)和id_rsa.pub(公钥文件)

ssh-keygen
ssh-copy-id 节点1IP地址
ssh-copy-id 节点2IP地址
ssh-copy-id 节点3IP地址
  • 分发完成后,被分发的节点会在用户家目录下的.ssh目录下生成authorized_keys文件,此文件负责保存得到的公钥,再有其他节点分发给它公钥,公钥会被追加到此文件中。

  • 此外hadoop1下还会生产known_hosts文件,该文件在在用户家目录下的.ssh目录下,A通过ssh首次连接到B,B会将公钥1(host key)传递给A,A将公钥1存入known_hosts文件中,以后A再连接B时,B依然会传递给A一个公钥2,OpenSSH会核对公钥,通过对比公钥1与公钥2 是否相同来进行简单的验证,如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。

2 scp(secure copy,安全拷贝)

介绍:scp命令是依赖于ssh协议的远程拷贝技术,便于将文件从一个节点拷贝到另一个节点

scp [选项] [用户@主机:]文件/目录 [用户@主机:]文件/目录

选项:
-r #递归拷贝,用于拷贝目录

3 rsync(remote sync,远程同步)

rsync和scp区别:rsync只对差异文件做同步,scp是把所有文件都复制过去。

rsync [选项] [用户@主机:]文件/目录 [用户@主机:]文件/目录

选项:
-a  #可以递归同步(可以同步元信息,比如修改时间、权限等)
-v  #显示复制过程

4. xsync集群分发脚本

为了方便将修改的文件分发给其他节点,建一个脚本文件。

vim /bin/xsync.sh
#!/bin/bash
# 判断参数个数
if [ $# -lt 1 ]
then
  echo Not Enough Arguement!
  exit;
fi

# 遍历要分发的节点
for host in hadoop2 hadoop3
do
  echo ====================  $host  ====================
  # 遍历所有输入的文件/目录
  for file in $@
  do
    # 判断文件是否存在
    if [ -e $file ]
    then
      # 获取父目录
      pdir=$(cd -P $(dirname $file); pwd)
      # 获取当前文件的名称
      fname=$(basename $file)
      ssh $host "mkdir -p $pdir"
      rsync -av $pdir/$fname $host:$pdir
    else
      echo $file does not exists!
    fi
  done
done
# 要给脚本执行权限
chmod +x xsync.sh