今日登陆阿里云,发现 阿里云 推出了 Cloud Shell,本以为是 一个 模拟 终端的一个小工具,体(zhe)验(teng)一番,发现 竟然 是一个 真实的 被限制的 Linux环境,基于 Alpine Linux。好兴奋,有免费的测试机玩了。。。。
常用命令都被软关联到了 busybox。测试了下 gcc、apt-get、yum、rpm统统没有,这样就有点鸡肋了,除了自带的工具啥都不能安装。好在默认安装了 Python、SSH、curl等工具,pip因为权限太低不能安装库。
看了下 shell 中的核心命令 aliyun,功能还是很强大的,基本所有 业务都可以操作
之前 做过 域名API 相关的开发,拿域名入手,aliyun domain –help 可以看到 域名支持的操作,点击 链接可以进入 域名的API 文档。经过测试,API中的所有操作都可以 支持(很多在 命令帮助中 看不到),比如:QueryDomainList。
阿里的域名导出不太好用,用 QueryDomainList 接口,做个 域名导出工具,练练手。根据文档,必须的参数 有 PageNum、PageSize。 执行 aliyun domain QueryDomainList –PageNum 1 –PageSize 10000,就获取到了 每页10000条,第一个 的域名数据。将 输出的 JSON 信息 上传到 服务器处理(比如PHP),生成 csv 下载。
最终生成的文件如下:
完整的PHP源码如下:
<?php
/**
* 文件:domain.php
* 作者:mqycn
* 博客:http://www.miaoqiyuan.cn
* 源码:http://www.miaoqiyuan.cn/p/aliyun-cloud-shell
* 说明:阿里云 Cloud Shell 一键 导出所有域名
*/
define('APP_PATH', 'http://www.miaoqiyuan.cn/products/alishell/'); //安装目录
define('APP_URL', APP_PATH . 'domain.php'); //程序路径
define('APP_ACTION', isset($_GET['action']) ? $_GET['action'] : ''); //请求方法
//读取 YunShell 上传的信息
$data = json_decode(file_get_contents("php://input"), true);
if (!empty($data) && isset($data['Data']) && isset($data['Data']['Domain'])) {
switch (APP_ACTION) {
case 'tocsv':
//分页上传域名数据
if (!isset($_GET['key']) && !is_numeric($_GET['key'])) {
die("Key Error!");
}
$tmp_key = $_GET['key'];
$csv_data = '';
foreach ($data['Data']['Domain'] as $item) {
foreach ($item as $val) {
$csv_data .= $val . "\t";
}
$csv_data .= "\n";
}
$file_name = $tmp_key . '.txt';
file_put_contents($file_name, $csv_data, FILE_APPEND);
echo "Update: " . APP_PATH . "${file_name}";
break;
default:
//根据 总页数 生成 脚本
if (isset($data['TotalPageNum']) && is_numeric($data['TotalPageNum'])) {
$page_all = (int) $data['TotalPageNum'];
echo "\n\necho All:{$page_all}\n";
$tmp_key = date('Ymdhis');
for ($page_id = 1; $page_id <= $page_all; $page_id++) {
echo "\necho Download {$page_id}/${page_all}\n";
echo 'curl "' . APP_URL . '?action=tocsv&key=' . $tmp_key . '" --data "`' . "aliyun domain QueryDomainList --PageNum ${page_id} --PageSize 100" . '`"';
}
}
break;
}
//结尾输出换行,防止影响提示符
die("\n");
} else {
//直接访问,输出调用命令
echo 'curl ' . APP_URL . ' --data "`aliyun domain QueryDomainList --PageNum 1 --PageSize 100`"|bash';
}
?>