Python工程师的大数据之路(二)免密登录、文件传输

1、非对称加密

  • 对称加密:加密和解密使用相同密钥的加密算法
  • 非对称加密:加密和解密使用不同密钥的加密算法
  • 非对称加密需要成对的公钥(public key)和私钥(private key)
  • 公钥加密的数据 只有对应的私钥可以解密
  • 私钥加密的数据 只有对应的公钥可以解密

1.1、RSA加密算法

  • 主流的非对称加密算法
  • 麻省理工学院工作的 Ron Rivest、Adi Shamir、Leonard Adleman 3人一起提出
  • 公钥用于加密
  • 私钥用于解密

2、SSH

  • Secure Shell
  • 安全外壳协议
  • 建立在应用层基础上的安全协议
  • 专为远程登录会话和其他网络服务提供安全性的协议
  • SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其它操作平台

3、文件传输

  • 3.1、scp命令(-r是递归复制)
    使用命令:scp -r 本地待传输文件夹 目标机器:路径

  • 3.2、rsync(remote sync
    安装命令:yum install rsync
    使用命令:rsync -r 待传输文件 目标服务器:路径

4、SSH免密登录配置

集群IP192.168.1.100192.168.1.101192.168.1.102
网络映射hadoop100hadoop101hadoop102
vi /etc/hosts
192.168.1.100 hadoop100
192.168.1.101 hadoop101
192.168.1.102 hadoop102

4.1、单向免密登录

4.1.1、生成公钥和私钥

ssh-keygen

使用ssh-keygen生成公钥和私钥(默认rsa),一路回车

4.1.2、查看公钥和私钥

[root@hadoop100 ~]# ll /root/.ssh/
总用量 8
-rw-------. 1 root root 1679 11月 27 11:14 id_rsa
-rw-r--r--. 1 root root  396 11月 27 11:14 id_rsa.pub

ll /root/.ssh/会看到id_rsa(私钥)和id_rsa.pub(公钥)

4.1.3、上传公钥到目标服务器

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.101

(地址192.168.1.101;用户root

4.1.4、测试免密登录

ssh 'root@192.168.1.101'

测试免密登录,可以看到目标服务器多了个authorized_keys

192.168.1.101不能免密登录192.168.1.100

4.2、集群间免密登录

下面要实现192.168.1.100192.168.1.101192.168.1.102之间的免密登录

  • 1️⃣编辑每台机器的/etc/hosts
vi /etc/hosts
192.168.1.100 hadoop100
192.168.1.101 hadoop101
192.168.1.102 hadoop102
ping hadoop101

  • 2️⃣本地生成authorized_keys
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop100

  • 3️⃣将整个/root/.ssh文件夹发送到另外两台机
scp -r /root/.ssh hadoop101:/root
scp -r /root/.ssh hadoop102:/root

  • 4️⃣在每台检验相互之间的免密登录
ssh hadoop101

ssh 192.168.1.102

5、集群脚本示例

配置免密登录后,可以编写一些集群脚本

5.1、集群jps

man grep可查-E是正则匹配-o是不匹配行只匹配出部分

touch /usr/bin/jps.sh
chmod 777 /usr/bin/jps.sh
vi /usr/bin/jps.sh
#!/usr/bin/bash
for i in `cat /etc/hosts | grep -Eo hadoop[0-9]+`
do
    echo "======= $i ======="
    ssh $i "jps | grep -v Jps"
done

5.2、集群文件分发

#!/usr/bin/python2
import os, re, socket

a = os.sys.argv
print a
if len(a) != 2:
    exit('Usage: rsync.py a.txt')

a = a[1]
if not a.startswith('/'):
    a = os.path.join(os.getcwd(), a)
if os.path.isdir(a) and not a.endswith('/'):
    a += '/'
# print a
if not os.path.exists(a):
    exit("Path doesn't exist")

hostname = socket.gethostname()
with open('/etc/hosts') as f:
    for i in re.findall('hadoop[0-9]+', f.read()):
        if i == hostname:
            continue
        aa = 'rsync -a %s %s:%s' % (a, i, a)
        print aa
        os.system(aa)

5.3、其它

https://yellow520.blog.csdn.net/article/details/113068462

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付 99.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值