本实践通过在节点中使用python三方模块Paramiko,实现远程连接ECS并调用ECS上指定路径的Shell脚本执行,并提供两类节点登录ECS的代码示例。
注意事项
- 通过DataWorks节点运行ECS机器上的脚本,当DataWorks侧对应节点终止运行时,已经在机器上执行的文件仍然会继续执行。
- 通过DataWorks节点运行ECS机器上脚本的方案仅建议在使用在数据迁移场景下,不建议在日常生产中使用。
功能概述
当前文档提供两类节点登录ECS案例,具体如下:
环境准备
- 准备独享调度资源组,并配置独享调度资源组的网络连通。
- 访问内网环境,网络连通配置参考网络连通方案,ECS安全组入网规则配置独享调度资源组绑定的交换机网段。
- 访问公网环境,可直接访问,若ECS存在安全组配置,ECS安全组入网规则配置独享调度资源组EIP。
说明 获取独享调度资源组相关IP的方式参考:使用独享调度资源组执行任务需要添加的IP白名单。 - 在独享调度资源组安装python第三方包。
通过独享调度资源组的运维助手功能安装本案例需要使用的三方包Paramiko,命令如下。
pyodps使用第三方详情请参见:pyodps使用开源的三方包。/home/tops/bin/pip3 install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple /home/tops/bin/pip3 install paramiko==2.11.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
方式一:PyODPS节点通过用户名和密码登录ECS
在PYODPS节点中通过用户名密码登录ECS,本示例使用的节点为PYODPS3,代码示例如下:
# 参考:在PyODPS节点中调用第三方包 https://help.aliyun.com/document_detail/94159.html#section-f47-6lb-txv
# /home/tops/bin/pip3 install paramiko==2.11.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
# /home/tops/bin/pip3 install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
from paramiko import SSHClient
import paramiko
import sys
client = SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('172.16.0.0', username='root', password='****')
stdin, stdout, stderr = client.exec_command('sh /root/upload_mc_tpcds_1000_warehouse.sh')
stdout.channel.set_combine_stderr(True)
# print(type(stdin)) # <class 'paramiko.channel.ChannelStdinFile'>
# print(type(stdout)) # <class 'paramiko.channel.ChannelFile'>
# print(type(stderr)) # <class 'paramiko.channel.ChannelStderrFile'>
# Print output of command. Will wait for command to finish.
print(f'STDOUT: {stdout.read().decode("utf8")}')
# print(f'STDERR: {stderr.read().decode("utf8")}')
# Get return code from command (0 is default for success)
print(f'Return code: {stdout.channel.recv_exit_status()}')
return_code = stdout.channel.recv_exit_status()
stdin.close()
stdout.close()
stderr.close()
client.close()
if return_code == 0:
print(f'Over...')
sys.exit(0)
print(f'Remote shell is failed...')
sys.exit(-1)
方式二:PyODPS节点通过用户名和私钥登录ECS并使用工具类
关于paramiko私钥使用的相关说明请参见: