Массовая смена пароля на серверах Linux
Отделом безопасности была поставлена задача сменить свой пароль на всех серверах Linux.
А серверов таких много, и заходить на каждый менять вручную не хочется. Поэтому я решил обратиться ChatGPT за скриптом, который будет менять пароль на всех серверах из моего списка. Это PowerShell скрипт, запускаемый с Windows машины:
# Установка модуля (если ещё не установлен)
Install-Module -Name Posh-SSH -Scope CurrentUser
Import-Module Posh-SSH
$hostsFile = Join-Path $PSScriptRoot "hosts.txt"
if (-not (Test-Path $hostsFile)) {
Write-Error "Не найден файл hosts.txt по пути $hostsFile"
exit 1
}
$servers = Get-Content -LiteralPath $hostsFile
$username = "youruser"
$oldPass = "old_password"
$newPass = "new_password"
$secOld = ConvertTo-SecureString $oldPass -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($username, $secOld)
foreach ($server in $servers) {
Write-Host "Подключение к ${server} …"
try {
$session = New-SSHSession -ComputerName $server -Credential $cred -AcceptKey
$cmd = "printf '%s\n' $oldPass $newPass $newPass | passwd"
$res = Invoke-SSHCommand -SessionId $session.SessionId -Command $cmd
Write-Host "Результат на ${server}: $($res.Output)"
}
catch {
Write-Warning "Ошибка на ${server}: $_"
}
finally {
if ($session) { Remove-SSHSession -SessionId $session.SessionId }
}
}
Нужно изменить под себя вот эти переменные:
$username = "youruser"
$oldPass = "old_password"
$newPass = "new_password"
А файл hosts.txt наполнить списком своих серверов в таком виде:
server1
server2
192.168.0.10
server4.domain
Скрипт и файл hosts.txt должны лежать в одном каталоге.
Всё. После запуска скрипт пойдёт по серверам менять пароли:

Донаты принимаются на кошельки:
Yoomoney:
4100118091867315
Карта Т-Банк (бывший Тиньков):
2200 7017 2612 2077
Карта Альфа-Банк:
2200 1539 1357 2013




