在win,linux本地powershell脚本中,远程执行azure或aws上的命令或脚本。
---【一 关于并发】---
脚本是顺序执行的,可以完成【顺序】批量。
但有1(或n台)被控机卡住问题。
这时候就需要【多进程】、【多线程】来解决。
【多进程】、【多线程】带来了【并发】批量,解决了【卡住】问题。
---【二 在linux上安装powershell】---
powershell脚本是win,linux通用的。对于linux你需要安装powershell先。
https://gitee.com/chuanjiao10/kasini3000_agent_linux
---【三 kasini3000】---
安装:
需要安装《kasini3000》脚本框架 https://gitee.com/chuanjiao10/kasini3000
账号:
需要编写nodelist.csv
kasini3000优势:
主控机<--->被控机,双向传递powershell对象(.net对象)
同时支持多云(多公有云,私有云)。支持azure,aws,阿里云,华为云等。
具有【多线程】并发批量,【多进程】并发批量,主控机任务计划。
每台被控机输出的结果,返回并保存在主控机的sqlite数据库中,供后续随时查询。
kasini3000主控机,支持安装在win,linux上。
win:nodelist.csv统一管理账号,密码。
linux:采用双秘钥ssh-key-file,随时更换其一。
win被控机,不需要任何安装。
win客户机版,需要启用winrm。
win服务器版,基本无需任何设定。
linux被控机版,需要一键安装powershell。
#远程执行命令
$从被控机返回到主控机的对象a = k_run_ip -ip 被控机ip {
可以是azure,aws,华为云,阿里云,腾讯云,私有云中的win,linux被控机命令,或脚本
100%兼容shell命令,shell脚本,py脚本。
}
#进入远程终端
gtnode 被控机ip
#多进程并发批量
k-commit -ip 被控机ip {
可以是azure,aws,华为云,阿里云,腾讯云,私有云中的win,linux被控机命令,或脚本
100%兼容shell命令,shell脚本,py脚本。
}
#多线程并发批量
k-commit-rs -ip 被控机ip {
可以是azure,aws,华为云,阿里云,腾讯云,私有云中的win,linux被控机命令,或脚本
100%兼容shell命令,shell脚本,py脚本。
}
#多线程并发,多线程并发,还有-file参数
k-commit -ip 被控机ip -f 'd:\主控机目录\此脚本会被自动复制到每台被控机.ps1'
k-commit-rs -ip 被控机ip -f 'd:\主控机目录\此脚本会被自动复制到每台被控机.ps1'
#从被控机返回结果,写入主控机slite数据库
k-commit-rs -ip 被控机ip {
Write-Output '磁盘满了' #一般搭配if ()使用
支持shell命令,shell脚本,py脚本的结果,返回到主控机,并保存到sqlite数据库。只需要echo 'xxx'
}
#在主控机上输出
kl-rs -ip 被控机ip
#从主控机,复制主控机文件目录,到被控机
k_copyto_ip -ip 被控机ip -LiteralPath '主控机目录' -Destination '被控机目录'
#从主控机,复制被控机文件目录,到主控机
k_copyfrom_ip -ip 被控机ip -LiteralPath '被控机目录' -Destination '主控机目录'
---【四 在win、linux本地powershell脚本中,远程执行azure命令,脚本(有多台卡住问题)】---
安装:
Install-Module -Name Az.Compute
Install-Module -Name Az.Accounts
账号:
$账号 = Get-Credential
Connect-AzAccount -Credential $账号
$ResourceGroupColl = Get-AzureRMResourceGroup
foreach ($ResourceGroup in $ResourceGroupColl)
{
$所有虚拟机 = Get-AzureRmVM -ResourceGroupName $ResourceGroup.ResourceGroupName
foreach ($单个虚拟机 in $所有虚拟机)
{
Invoke-AzVMRunCommand -ResourceGroupName $单个虚拟机.ResourceGroupName -VMName $VirtualMachine.Name -Command {
#手册在此 https://docs.microsoft.com/en-us/powershell/module/az.compute/invoke-azvmruncommand?view=azps-8.1.0
#win,linux虚拟机命令如:ls -l
}
}
}
#远程运行linux命令
Get-AzVM | Where-Object {$_.StorageProfile.OSDisk.OSType -eq 'Linux'} | foreach {
Invoke-AzVMRunCommand -CommandID 'runshellscript' -scriptstring "service --status-all"
}
#远程管理win
#Enable ps remoting
Enable-AzVMPSRemoting -Name web1 -ResourceGroupName WebServers -Protocol https -OsType Windows
#win账号,密码
$u = 'sysadmin'
$p = ConvertTo-SecureString 'pwd' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ($u, $p)
#远程执行命令
Invoke-AzVMrunCommand -Name web1 -ResourceGroupName WebServers -ScriptBlock {get-service win*} -Credential $cred
#进入远程终端
Enter-AzVM -Name web1 -ResourceGroupName WebServers -Credential $cred
---【五 在win、linux本地powershell脚本中,远程执行aws命令,脚本(有多台卡住问题)】---
安装:
Install-Module -Name AWS.Tools.Common
Install-Module -Name AWS.Tools.SimpleSystemsManagement
账号:
Set-AWSCredential -AccessKey '你的AK' -SecretKey '你的SK'
Set-DefaultAWSRegion -Region "cn-north-1"
问:如何通过powershell,向aws的ec2虚拟机(win-linux)中发送命令?
答:
https://docs.aws.amazon.com/powershell/latest/reference/items/Send-SSMCommand.html
网页最下面有例子。
---【后记】---
建议使用开源、免费、跨平台的kasini3000,连接aws、azure、阿里等云上的win、linux虚拟机,发送指令,运行脚本。
kasini3000对标ansible,ansible基于yaml语言。kasini3000基于脚本,传参、传值比较方便。而且传值可以传对象。
谢谢观看,完。
留言与评论(共有 0 条评论) “” |