I just needed to regenerate self-signed certificate on some of my home lab servers
For fowllowing commands It was required to install these module:
Posh-SSH and CredentialManager so first of all I installed these modules :
Install-Module -Name Posh-SSH
Install-Module credentialmanager
Then I stared to write PowerShell script to:
- Get all the hosts in Tanzu cluster
- Check for each host whether it is in Maintenance mode and then continue the procedure ( if the host is not in maintenance the code will not be executed on that)
- Enable the ssh service on each the server
- Backup the current certificate and keys
- Generate new certificate
- Reboot ESXi server ( Please be carefull when the host is rebooted then the old certifications will be removed during the next reboot if you need them please remove reboot from the first line (&& reboot) and then execute the script
After Running the script it ask you about the vCenter server address and credentials then the process will be started
$vcs = Read-Host "Please enter the vCenter Server Address"
Connect-VIServer -Server $vcs
$cluster= Read-Host "Please enter the name of cluster which you want to execute the command"
$cmd = 'mv /etc/vmware/ssl/rui.crt /etc/vmware/ssl/rui.crt.old ; mv /etc/vmware/ssl/rui.key /etc/vmware/ssl/rui.key.old ; /sbin/generate-certificates && reboot'
$user = 'root'
$pswd = 'VMware1!'
$pswdSec = ConvertTo-SecureString -String $pswd -AsPlainText -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user, $pswdSec
get-vmhost| Where-Object {$_.Parent -like $cluster } | ForEach-Object -Process {
if( ((Get-VMhost $_).State ) -eq "Maintenance" ) {
Write-host $_ "is alrady in maintenance mode"
if((Get-VMHostService -VMHost $_).where({$_.Key -eq 'TSM-SSH' }).Running){
Write-Host "ssh was already enabled"
Write-Host "executing commands"
$ssh = New-SSHSession -ComputerName $_.Name -Credential $cred -AcceptKey -KeepAliveInterval 5 -Verbose
Invoke-SSHCommand -SessionId $ssh.SessionId -Command $cmd -TimeOut 30
Remove-SSHSession -SessionId $ssh.SessionId
}
else{
Get-VMHostService -VMHost $_ | Where-Object {$_.Key -eq "TSM-SSH" } | Start-VMHostService -confirm:$false
Write-Host "ssh has been enabled"
Write-Host "executing commands"
$ssh = New-SSHSession -ComputerName $_.Name -Credential $cred -AcceptKey -KeepAliveInterval 5 -Verbose
Invoke-SSHCommand -SessionId $ssh.SessionId -Command $cmd -TimeOut 30
Remove-SSHSession -SessionId $ssh.SessionId
}
}
else{
write-host "The Server" $_ "is not in maintenance mode so the command has not been executed"
write-host (Get-VMhost $_).State
}
}