So when we build datacenters for clients we sometimes make hostfile entries to the ESXi hosts. This was a tedious boring task . Imagine yourself
enabling SSH on 100 hosts
edit the /etc/hosts in the shell command
disable ssh on 100 hosts.
Even if you calculate 5 minutes a host it is 500
I thought of trying to find a lazy man's way around it since I consider to be one.
Once again plink to the rescue.
First of all we will use alan's plink script to download it if we dont have it.
#http://www.virtu-al.net/2013/01/07/ssh-powershell-tricks-with-plink-exe/
$PlinkLocation = $PSScriptRoot + "\Plink.exe"
If (-not (Test-Path $PlinkLocation)){
Write-Host "Plink.exe not found, trying to download..."
$WC = new-object net.webclient
$WC.DownloadFile("http://the.earth.li/~sgtatham/putty/latest/x86/plink.exe",$PlinkLocation)
If (-not (Test-Path $PlinkLocation)){
Write-Host "Unable to download plink.exe, please download from the following URL and add it to the same folder as this script: http://the.earth.li/~sgtatham/putty/latest/x86/plink.exe"
Exit
} Else {
$PlinkEXE = Get-ChildItem $PlinkLocation
If ($PlinkEXE.Length -gt 0) {
Write-Host "Plink.exe downloaded, continuing script"
} Else {
Write-Host "Unable to download plink.exe, please download from the following URL and add it to the same folder as this script: http://the.earth.li/~sgtatham/putty/latest/x86/plink.exe"
Exit
}
}
}
It is better to have this plink copied manually to the folder where the script is located and run this script from a location where you can resolve the hostnames of the target hosts.
#If using in powershell then add snapins below for VMware ESXi.
Add-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue
#Disconnect from already connected viservers if any
Disconnect-VIServer * -ErrorAction SilentlyContinue
#Connect to the vcenter server
connect-viserver
#X server's credentials
$user = Read-Host "Host's username?"
$pass = Read-Host "Host's password?"
#copy plink & pscp to c:\ for now
Copy-Item $PSScriptRoot\plink.exe C:\
#variables
#put the name of the cluster between quotes. Enter multiple cluster's names & separate them by a comma (no space in between)
$cluster = ""
$VMHosts = get-cluster $cluster | Get-VMHost | sort
#Enable SSH on all hosts
get-cluster $cluster | Get-VMHost | Get-VMHostService | where {$_.Key -eq "TSM-SSH"} | Start-VMHostService
ForEach ($VMHost in $VMHosts)
{
echo y | C:\plink.exe -ssh $user@$VMHost -pw $pass "exit"
#replace the 'someline' with the value that you want.
#To add multiple lines repeat the below command multiple times with the respective values instead of someline (enclose entries within "")
C:\plink.exe -ssh -v -noagent $VMHost -l $user -pw $pass 'echo "someline" >> /etc/hosts'
#This line below displays the resulting contents of the file
C:\plink.exe -ssh -v -noagent $VMHost -l $user -pw $pass "cat /etc/hosts"
}
#delete plink from c:\
Remove-Item C:\plink.exe
#Disable SSH on all hosts
get-cluster $cluster | Get-VMHost | Get-VMHostService | where {$_.Key -eq "TSM-SSH"} | Stop-VMHostService -confirm:$false
#####additional sources#####
Hey don't blame me if I don't update it here much. I only udpate them on github for all.
enabling SSH on 100 hosts
edit the /etc/hosts in the shell command
disable ssh on 100 hosts.
Even if you calculate 5 minutes a host it is 500
I thought of trying to find a lazy man's way around it since I consider to be one.
Once again plink to the rescue.
First of all we will use alan's plink script to download it if we dont have it.
#http://www.virtu-al.net/2013/01/07/ssh-powershell-tricks-with-plink-exe/
$PlinkLocation = $PSScriptRoot + "\Plink.exe"
If (-not (Test-Path $PlinkLocation)){
Write-Host "Plink.exe not found, trying to download..."
$WC = new-object net.webclient
$WC.DownloadFile("http://the.earth.li/~sgtatham/putty/latest/x86/plink.exe",$PlinkLocation)
If (-not (Test-Path $PlinkLocation)){
Write-Host "Unable to download plink.exe, please download from the following URL and add it to the same folder as this script: http://the.earth.li/~sgtatham/putty/latest/x86/plink.exe"
Exit
} Else {
$PlinkEXE = Get-ChildItem $PlinkLocation
If ($PlinkEXE.Length -gt 0) {
Write-Host "Plink.exe downloaded, continuing script"
} Else {
Write-Host "Unable to download plink.exe, please download from the following URL and add it to the same folder as this script: http://the.earth.li/~sgtatham/putty/latest/x86/plink.exe"
Exit
}
}
}
It is better to have this plink copied manually to the folder where the script is located and run this script from a location where you can resolve the hostnames of the target hosts.
#If using in powershell then add snapins below for VMware ESXi.
Add-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue
#Disconnect from already connected viservers if any
Disconnect-VIServer * -ErrorAction SilentlyContinue
#Connect to the vcenter server
connect-viserver
#X server's credentials
$user = Read-Host "Host's username?"
$pass = Read-Host "Host's password?"
#copy plink & pscp to c:\ for now
Copy-Item $PSScriptRoot\plink.exe C:\
#variables
#put the name of the cluster between quotes. Enter multiple cluster's names & separate them by a comma (no space in between)
$cluster = ""
$VMHosts = get-cluster $cluster | Get-VMHost | sort
#Enable SSH on all hosts
get-cluster $cluster | Get-VMHost | Get-VMHostService | where {$_.Key -eq "TSM-SSH"} | Start-VMHostService
ForEach ($VMHost in $VMHosts)
{
echo y | C:\plink.exe -ssh $user@$VMHost -pw $pass "exit"
#replace the 'someline' with the value that you want.
#To add multiple lines repeat the below command multiple times with the respective values instead of someline (enclose entries within "")
C:\plink.exe -ssh -v -noagent $VMHost -l $user -pw $pass 'echo "someline" >> /etc/hosts'
#This line below displays the resulting contents of the file
C:\plink.exe -ssh -v -noagent $VMHost -l $user -pw $pass "cat /etc/hosts"
}
#delete plink from c:\
Remove-Item C:\plink.exe
#Disable SSH on all hosts
get-cluster $cluster | Get-VMHost | Get-VMHostService | where {$_.Key -eq "TSM-SSH"} | Stop-VMHostService -confirm:$false
#####additional sources#####
Hey don't blame me if I don't update it here much. I only udpate them on github for all.