今日登陸阿里云,發現 阿里云 推出了 Cloud Shell,本以為是 一個 模擬 終端的一個小工具,體(zhe)驗(teng)一番,發現 竟然 是一個 真實的 被限制的 Linux環境,基于 Alpine Linux。好興奮,有免費的測試機玩了。。。。
image
常用命令都被軟關聯到了 busybox。測試了下 gcc、apt-get、yum、rpm統統沒有,這樣就有點雞肋了,除了自帶的工具啥都不能安裝。好在默認安裝了 Python、SSH、curl等工具,pip因為權限太低不能安裝庫。
image
看了下 shell 中的核心命令 aliyun,功能還是很強大的,基本所有 業務都可以操作
image
之前 做過 域名API 相關的開發,拿域名入手,aliyun domain –help 可以看到 域名支持的操作,點擊 鏈接可以進入 域名的API 文檔。經過測試,API中的所有操作都可以 支持(很多在 命令幫助中 看不到),比如:QueryDomainList。
image
image
阿里的域名導出不太好用,用 QueryDomainList 接口,做個 域名導出工具,練練手。根據文檔,必須的參數 有 PageNum、PageSize。 執行 aliyun domain QueryDomainList –PageNum 1 –PageSize 10000,就獲取到了 每頁10000條,第一個 的域名數據。將 輸出的 JSON 信息 上傳到 服務器處理(比如PHP),生成 csv 下載。
image
最終生成的文件如下:
image
完整的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';
}
?>