Add zabbix, influx regex, openssl
Pre add: ansible, winrm config, bit convertor, openssh, hyper-v, pki
This commit is contained in:
parent
b316571e3f
commit
aeb2dad2af
1 changed files with 383 additions and 95 deletions
478
posh.txt
478
posh.txt
|
|
@ -53,13 +53,13 @@ PowerShell Commands
|
|||
# Performance
|
||||
# SNMP
|
||||
# Zabbix
|
||||
# pki
|
||||
# OpenSSL
|
||||
# OpenSSH
|
||||
# WinRM
|
||||
# pki
|
||||
# DSC
|
||||
# Git
|
||||
# Ansible
|
||||
# Jenkins
|
||||
|
||||
### Help
|
||||
Get-Verb # действия/глаголы, утвержденные для использования в командлетах
|
||||
|
|
@ -316,6 +316,17 @@ $ # Конец строки
|
|||
-match "zabbix|rpc" # условия, для поиска по нескольким словам
|
||||
-NotMatch # проверка на отсутствие вхождения
|
||||
|
||||
### Matches
|
||||
$ip = "192.168.10.1"
|
||||
$ip -match "(\.\d{1,3})\.\d{1,2}" # True
|
||||
$Matches # отобразить все подходящие переменные последнего поиска, которые входят и не входят в группы ()
|
||||
|
||||
$String = "09/14/2017 12:00:27 - mtbill_post_201709141058.txt 7577_Delivered: OK"
|
||||
$String -Match ".*(?=\.txt)" | Out-Null
|
||||
$Matches[0][-4..-1] -Join ""
|
||||
|
||||
$string.Substring($string.IndexOf(".txt")-4, 4) # 2-й вариант (IndexOf)
|
||||
|
||||
### Форматирование (.NET method format)
|
||||
[string]::Format("{1} {0}","Index0","Index1")
|
||||
"{1} {0}" -f "Index0","Index1"
|
||||
|
|
@ -330,17 +341,6 @@ foreach ($p in $gp) {
|
|||
"{0} - {1:N2}" -f $p.processname, $p.cpu # округлить
|
||||
}
|
||||
|
||||
### Matches
|
||||
$ip = "192.168.10.1"
|
||||
$ip -match "(\.\d{1,3})\.\d{1,2}" # True
|
||||
$Matches # отобразить все подходящие переменные последнего поиска, которые входят и не входят в группы ()
|
||||
|
||||
$String = "09/14/2017 12:00:27 - mtbill_post_201709141058.txt 7577_Delivered: OK"
|
||||
$String -Match ".*(?=\.txt)" | Out-Null
|
||||
$Matches[0][-4..-1] -Join ""
|
||||
|
||||
$string.Substring($string.IndexOf(".txt")-4, 4) # 2-й вариант (IndexOf)
|
||||
|
||||
### Условный оператор
|
||||
$rh = Read-Host
|
||||
if ($rh -eq 1) {ipconfig} elseif ($rh -eq 2) {getmac} else {hostname}
|
||||
|
|
@ -2481,6 +2481,12 @@ $Explorer = $Folder.GetExplorer()
|
|||
$Explorer.Display()
|
||||
$Outlook.Quit()
|
||||
|
||||
### Microsoft.Update
|
||||
|
||||
(New-Object -com 'Microsoft.Update.AutoUpdate').Settings
|
||||
(New-Object -com 'Microsoft.Update.AutoUpdate').Results
|
||||
(New-Timespan -Start ((New-Object -com 'Microsoft.Update.AutoUpdate').Results|Select -ExpandProperty LastInstallationSuccessDate) -End (Get-Date)).hours # кол-во часов, прошедших с последней даты установки обновления безопасности в Windows.
|
||||
|
||||
# dotNET
|
||||
|
||||
[System.Diagnostics.EventLog] | select Assembly,Module
|
||||
|
|
@ -3855,6 +3861,7 @@ influx
|
|||
influx --host 192.168.3.104 --username admin --password password
|
||||
|
||||
### USERS
|
||||
|
||||
SHOW USERS # отобразить пользователей и их права доступа
|
||||
CREATE USER admin WITH PASSWORD 'password' WITH ALL PRIVILEGES # создать пользователя
|
||||
GRANT ALL PRIVILEGES TO "admin" # предоставить права доступа
|
||||
|
|
@ -3865,12 +3872,16 @@ SET PASSWORD FOR "admin" = 'new_password' # изменить пароль
|
|||
DROP USER "admin" # удалить пользователя
|
||||
|
||||
### DATABASE
|
||||
|
||||
CREATE DATABASE powershell # создать БД
|
||||
SHOW DATABASES # отобразить список БД
|
||||
DROP DATABASE powershell # удалить БД
|
||||
USE powershell
|
||||
SHOW measurements # отобразить все таблицы
|
||||
INSERT performance,host=console,counter=CPU value=0.88 # записать данные в таблицу performance
|
||||
|
||||
### SELECT/WHERE
|
||||
|
||||
SELECT * FROM performance # отобразить все данные в таблице
|
||||
SELECT value FROM performance # отфильтровать по столбцу value (только Field Keys)
|
||||
SELECT * FROM performance limit 10 # отобразить 10 единиц данных
|
||||
|
|
@ -3881,9 +3892,30 @@ SELECT upload/1000 FROM speedtest WHERE upload/1000 <= 250 # выборка по
|
|||
DELETE FROM performance WHERE time > now() -1h # удалить данные за последние 1/4 часа
|
||||
DELETE FROM performance WHERE time < now() -24h # удалить данные старше 24 часов
|
||||
|
||||
SELECT/DELETE/SHOW/CREATE/DROP/EXPLAIN/GRANT/REVOKE/ALTER/SET/KILL
|
||||
### REGEX
|
||||
|
||||
SELECT * FROM "performance" WHERE host =~ /.*-Pro/ # приблизительно равно любое значение и на конце -Pro
|
||||
SELECT * FROM "win_pdisk" WHERE instance =~/.*C:/ and time > now() - 5m # и
|
||||
SELECT * FROM "win_pdisk" WHERE instance =~/.*E:/ or instance =~ /.*F:/ # или
|
||||
SELECT * FROM "win_pdisk" WHERE instance !~ /.*Total/ # не равно (исключить)
|
||||
|
||||
### GROUP BY tag_key
|
||||
|
||||
SELECT * FROM "win_pdisk" WHERE instance !~ /.*Total/ and instance !~/.*C:/ GROUP BY instance # группировать результаты по тегу
|
||||
|
||||
### Functions(field_key)
|
||||
https://docs.influxdata.com/influxdb/v1.8/query_language/functions/
|
||||
|
||||
SELECT instance,LAST(Avg._Disk_Read_Queue_Length) FROM "win_pdisk" GROUP BY instance # отфильтровать вывод по последнему/текущему значению
|
||||
SELECT instance,FIRST(Avg._Disk_Read_Queue_Length) FROM "win_pdisk" GROUP BY instance # отфильтровать вывод по первому значению за весь или указанный отрезок времени
|
||||
SELECT instance,MIN(Avg._Disk_Read_Queue_Length) FROM "win_pdisk" GROUP BY instance # отфильтровать вывод с отображением минимального значения
|
||||
SELECT instance,MAX(Avg._Disk_Read_Queue_Length) FROM "win_pdisk" GROUP BY instance # отфильтровать вывод с отображением максимального значения
|
||||
SELECT SUM(Bytes_Received_persec) FROM "win_net" GROUP BY instance # суммах всех значений
|
||||
SELECT COUNT(Bytes_Received_persec) FROM "win_net" WHERE Bytes_Received_persec >= 0 GROUP BY instance # кол-во данных, где значение выше или равно 0
|
||||
SELECT MEAN(Bytes_Received_persec) FROM "win_net" WHERE Bytes_Received_persec < 1000 GROUP BY instance # среднее значение данных с показателем от 0 до 1000 (509)
|
||||
|
||||
### POLICY
|
||||
|
||||
CREATE DATABASE powershell WITH DURATION 48h REPLICATION 1 NAME "del2d" # создать БД с политикой хранения 2 дня
|
||||
CREATE RETENTION POLICY del2h ON powershell DURATION 2h REPLICATION 1 # создать новую политику хранения для БД
|
||||
CREATE RETENTION POLICY del6h ON powershell DURATION 6h REPLICATION 1 SHARD DURATION 2h # указать период хранения 6 часов + 2 часа до очистки (по умолчанию 1ч или больше)
|
||||
|
|
@ -3932,7 +3964,7 @@ $data.results.series.name # имя таблицы
|
|||
$data.results.series.columns # столбцы/ключи
|
||||
$data.results.series.values # данные построчно
|
||||
|
||||
### Endpoint
|
||||
### Endpoints
|
||||
https://docs.influxdata.com/influxdb/v1.7/tools/api/
|
||||
|
||||
$stats = irm http://192.168.3.104:8086/debug/vars # статистика сервера
|
||||
|
|
@ -4358,6 +4390,339 @@ $results2 +=[PSCustomObject]@{'ID'=$d.id.ToString();'Data'=$d.Data.ToString()} #
|
|||
}
|
||||
$results2
|
||||
|
||||
# Zabbix
|
||||
|
||||
### Zabbix Agent Deploy
|
||||
|
||||
$url = "https://cdn.zabbix.com/zabbix/binaries/stable/6.4/6.4.5/zabbix_agent2-6.4.5-windows-amd64-static.zip"
|
||||
$path = "$home\Downloads\zabbix-agent2-6.4.5.zip"
|
||||
$WebClient = New-Object System.Net.WebClient
|
||||
$WebClient.DownloadFile($url, $path) # скачать файл
|
||||
Expand-Archive $path -DestinationPath "C:\zabbix-agent2-6.4.5\" # разархивировать
|
||||
Remove-Item $path # удалить архив
|
||||
New-NetFirewallRule -DisplayName "Zabbix-Agent" -Profile Any -Direction Inbound -Action Allow -Protocol TCP -LocalPort 10050,10051 # открыть порты в FW
|
||||
|
||||
$Zabbix_Server = "192.168.3.102"
|
||||
$conf = "C:\zabbix-agent2-6.4.5\conf\zabbix_agent2.conf"
|
||||
$cat = cat $conf
|
||||
$rep = $cat -replace "Server=.+","Server=$Zabbix_Server"
|
||||
$rep | Select-String Server=
|
||||
$rep > $conf
|
||||
|
||||
$exe = "C:\zabbix-agent2-6.4.5\bin\zabbix_agent2.exe"
|
||||
.$exe --config $conf --install # установить службу
|
||||
Get-Service *Zabbix*Agent* | Start-Service # запустить службу
|
||||
#.$exe --config $conf --uninstall # удалить службу
|
||||
|
||||
### zabbix_sender
|
||||
|
||||
Создать host - задать произвольное имя (powershell-host) и добавить в группу
|
||||
Создать Items:
|
||||
Name: Service Count
|
||||
Type: Zabbix trapper
|
||||
Key: service.count
|
||||
Type of Information: Numeric
|
||||
|
||||
$path = "C:\zabbix-agent2-6.4.5\bin"
|
||||
$scount = (Get-Service).Count
|
||||
.$path\zabbix_sender.exe -z 192.168.3.102 -s "powershell-host" -k service.count -o $scount
|
||||
|
||||
### zabbix_get
|
||||
|
||||
apt install zabbix-get
|
||||
nano /etc/zabbix/zabbix_agentd.conf
|
||||
Server=127.0.0.1,192.168.3.102,192.168.3.99 # добавить сервера для получения данных zabbix_get с агента (как их запрашивает сервер)
|
||||
|
||||
.$path\zabbix_get -s 192.168.3.101 -p 10050 -k agent.version # проверить версию агента
|
||||
.$path\zabbix_get -s 192.168.3.101 -p 10050 -k agent.ping # 1 - ok
|
||||
.$path\zabbix_get -s 192.168.3.101 -p 10050 -k net.if.discovery # список сетевых интерфейсов
|
||||
.$path\zabbix_get -s 192.168.3.101 -p 10050 -k net.if.in["ens33"]
|
||||
.$path\zabbix_get -s 192.168.3.101 -p 10050 -k net.if.out["ens33"]
|
||||
|
||||
### UserParameter
|
||||
|
||||
UserParameter=process.count,powershell -Command "(Get-Process).Count"
|
||||
UserParameter=process.vm[*],powershell -Command "(Get-Process $1).ws"
|
||||
|
||||
Test:
|
||||
C:\zabbix-agent2-6.4.5\bin\zabbix_get.exe -s 127.0.0.1 -p 10050 -k process.count
|
||||
C:\zabbix-agent2-6.4.5\bin\zabbix_get.exe -s 127.0.0.1 -p 10050 -k process.vm[zabbix_agent2]
|
||||
C:\zabbix-agent2-6.4.5\bin\zabbix_get.exe -s 127.0.0.1 -p 10050 -k process.vm[powershell]
|
||||
|
||||
Создать новые Items:
|
||||
key: process.count
|
||||
key: process.vm[zabbix_agent2]
|
||||
|
||||
### Include
|
||||
|
||||
- Добавить параметр Include для включения конфигурационных файлов подключаемых плагинов
|
||||
'Include=.\zabbix_agent2.d\plugins.d\*.conf' >> C:\zabbix-agent2-6.4.5\conf\zabbix_agent2.conf
|
||||
|
||||
- Создать конфигурационный файл с пользовательскими параметрами в каталоге, путь к которому указан в zabbix_agentd.conf
|
||||
'UserParameter=Get-Query-Param[*],powershell.exe -noprofile -executionpolicy bypass -File C:\zabbix-agent2-6.4.5\conf\zabbix_agent2.d\scripts\User-Sessions\Get-Query-Param.ps1 $1' > C:\zabbix-agent2-6.4.5\conf\zabbix_agent2.d\plugins.d\User-Sessions.conf
|
||||
|
||||
- Поместить скрипт Get-Query-Param.ps1 в каталог, путь к которому указан в User-Sessions.conf. Скрипт содержим пользовательские параметры, которые он принимает от Zabbix сервера для передачи их в функции скрипта.
|
||||
|
||||
Param([string]$select)
|
||||
if ($select -eq "ACTIVEUSER") {
|
||||
(Get-Query | where status -match "Active").User
|
||||
}
|
||||
if ($select -eq "INACTIVEUSER") {
|
||||
(Get-Query | where status -match "Disconnect").User
|
||||
}
|
||||
if ($select -eq "ACTIVECOUNT") {
|
||||
(Get-Query | where status -match "Active").Status.Count
|
||||
}
|
||||
if ($select -eq "INACTIVECOUNT") {
|
||||
(Get-Query | where status -match "Disconnect").Status.Count
|
||||
}
|
||||
|
||||
- Проверить работу скрипта:
|
||||
|
||||
$path = "C:\zabbix-agent2-6.4.5\conf\zabbix_agent2.d\scripts\User-Sessions"
|
||||
.$path\Get-Query-Param.ps1 ACTIVEUSER
|
||||
.$path\Get-Query-Param.ps1 INACTIVEUSER
|
||||
.$path\Get-Query-Param.ps1 ACTIVECOUNT
|
||||
.$path\Get-Query-Param.ps1 INACTIVECOUNT
|
||||
|
||||
- Создать Items с ключами:
|
||||
|
||||
Get-Query-Param[ACTIVEUSER] # Type: Text
|
||||
Get-Query-Param[INACTIVEUSER] # Type: Text
|
||||
Get-Query-Param[ACTIVECOUNT] # Type: Int
|
||||
Get-Query-Param[INACTIVECOUNT] # Type: Int
|
||||
|
||||
- Макросы:
|
||||
|
||||
{$ACTIVEMAX} = 16
|
||||
{$ACTIVEMIN} = 0
|
||||
|
||||
- Триггеры:
|
||||
|
||||
last(/Windows-User-Sessions/Get-Query-Param[ACTIVECOUNT])>{$ACTIVEMAX}
|
||||
min(/Windows-User-Sessions/Get-Query-Param[ACTIVECOUNT],24h)={$ACTIVEMIN}
|
||||
|
||||
### zabbix_agent2.conf
|
||||
|
||||
# Агент может работать в пассивном (сервер забирает сам информацию) и активном режиме (агент сам отправляет):
|
||||
Server=192.168.3.102
|
||||
ServerActive=192.168.3.102
|
||||
# Требуется указать hostname для ServerActive:
|
||||
Hostname=huawei-book-01
|
||||
# Если не указано, используется для генерации имени хоста (игнорируется, если имя хоста определено):
|
||||
# HostnameItem=system.hostname
|
||||
# Как часто обновляется список активных проверок, в секундах (Range: 60-3600):
|
||||
RefreshActiveChecks=120
|
||||
# IP-адрес источника для исходящих соединений:
|
||||
# SourceIP=
|
||||
# Агент будет слушать на этом порту соединения с сервером (Range: 1024-32767):
|
||||
# ListenPort=10050
|
||||
# Список IP-адресов, которые агент должен прослушивать через запятую
|
||||
# ListenIP=0.0.0.0
|
||||
# Агент будет прослушивать этот порт для запросов статуса HTTP (Range: 1024-32767):
|
||||
# StatusPort=
|
||||
ControlSocket=\\.\pipe\agent.sock
|
||||
# Куда вести журнал (file/syslog/console):
|
||||
LogType=file
|
||||
LogFile=C:\zabbix-agent2-6.4.5\zabbix_agent2.log
|
||||
# Размер лога от 0-1024 MB (0 - отключить автоматическую ротацию логов)
|
||||
LogFileSize=100
|
||||
# Уровень логирования. 4 - для отладки (выдает много информации)
|
||||
DebugLevel=4
|
||||
|
||||
### API Token
|
||||
|
||||
https://www.zabbix.com/documentation/current/en/manual/api/reference
|
||||
|
||||
$ip = "192.168.3.102"
|
||||
$url = "http://$ip/zabbix/api_jsonrpc.php"
|
||||
|
||||
$data = @{
|
||||
"jsonrpc"="2.0";
|
||||
"method"="user.login";
|
||||
"params"=@{
|
||||
"username"="Admin"; # в версии до 6.4 параметр "user"
|
||||
"password"="zabbix";
|
||||
};
|
||||
"id"=1;
|
||||
}
|
||||
$token = (Invoke-RestMethod -Method POST -Uri $url -Body ($data | ConvertTo-Json) -ContentType "application/json").Result
|
||||
|
||||
$token = "914ee100f4e8c4b68a70eab2a0a1fb153cfcd4905421d0ffacb82c20a57aa50e" # создать токен в UI (http://192.168.3.102/zabbix/zabbix.php?action=token.list)
|
||||
|
||||
### user.get
|
||||
|
||||
$data = @{
|
||||
"jsonrpc"="2.0";
|
||||
"method"="user.get";
|
||||
"params"=@{
|
||||
};
|
||||
"auth"=$token;
|
||||
"id"=1;
|
||||
}
|
||||
$users = (Invoke-RestMethod -Method POST -Uri $url -Body ($data | ConvertTo-Json) -ContentType "application/json").Result
|
||||
|
||||
### problem.get
|
||||
|
||||
$data = @{
|
||||
"jsonrpc"="2.0";
|
||||
"method"="problem.get";
|
||||
"params"=@{
|
||||
};
|
||||
"auth"=$token;
|
||||
"id"=1;
|
||||
}
|
||||
(Invoke-RestMethod -Method POST -Uri $url -Body ($data | ConvertTo-Json) -ContentType "application/json").Result
|
||||
|
||||
### host.get
|
||||
|
||||
Получить список всех хостов (имя и id)
|
||||
|
||||
https://www.zabbix.com/documentation/current/en/manual/api/reference/host
|
||||
|
||||
host.create - creating new hosts
|
||||
host.delete - deleting hosts
|
||||
host.get - retrieving hosts
|
||||
host.massadd - adding related objects to hosts
|
||||
host.massremove - removing related objects from hosts
|
||||
host.massupdate - replacing or removing related objects from hosts
|
||||
host.update - updating hosts
|
||||
|
||||
$data = @{
|
||||
"jsonrpc"="2.0";
|
||||
"method"="host.get";
|
||||
"params"=@{
|
||||
"output"=@( # отфильтровать вывод
|
||||
"hostid";
|
||||
"host";
|
||||
);
|
||||
};
|
||||
"id"=2;
|
||||
"auth"=$token;
|
||||
}
|
||||
$hosts = (Invoke-RestMethod -Method POST -Uri $url -Body ($data | ConvertTo-Json) -ContentType "application/json").Result
|
||||
$host_id = $hosts[3].hostid # забрать id хоста по индексу
|
||||
|
||||
### item.get
|
||||
|
||||
Получить id элементов данных по наименованию ключа для конкретного хоста
|
||||
|
||||
$data = @{
|
||||
"jsonrpc"="2.0";
|
||||
"method"="item.get";
|
||||
"params"=@{
|
||||
"hostids"=@($host_id); # отфильтровать по хосту
|
||||
};
|
||||
"auth"=$token;
|
||||
"id"=1;
|
||||
}
|
||||
$items = (Invoke-RestMethod -Method POST -Uri $url -Body ($data | ConvertTo-Json) -ContentType "application/json").Result
|
||||
$items_id = ($items | where key_ -match system.uptime).itemid # забрать id элемента данных
|
||||
|
||||
### history.get
|
||||
|
||||
Получить всю историю элемента данных по его id
|
||||
|
||||
$data = @{
|
||||
"jsonrpc"="2.0";
|
||||
"method"="history.get";
|
||||
"params"=@{
|
||||
"hostids"=@($host_id); # фильтрация по хосту
|
||||
"itemids"=@($items_id); # фильтрация по элементу данных
|
||||
};
|
||||
"auth"=$token;
|
||||
"id"=1;
|
||||
}
|
||||
$items_data_uptime = (Invoke-RestMethod -Method POST -Uri $url -Body ($data | ConvertTo-Json) -ContentType "application/json").Result # получить все данные по ключу у конкретного хоста
|
||||
|
||||
### Convert Secconds To TimeSpan and DateTime
|
||||
|
||||
$sec = $items_data_uptime.value
|
||||
|
||||
function ConvertSecondsTo-TimeSpan {
|
||||
param (
|
||||
$insec
|
||||
)
|
||||
$TimeSpan = [TimeSpan]::fromseconds($insec)
|
||||
"{0:dd' day 'hh\:mm\:ss}" -f $TimeSpan
|
||||
}
|
||||
|
||||
$UpTime = ConvertSecondsTo-TimeSpan $sec[-1]
|
||||
|
||||
### Convert From Unix Time
|
||||
|
||||
$time = $items_data_uptime.clock
|
||||
|
||||
function ConvertFrom-UnixTime {
|
||||
param (
|
||||
$intime
|
||||
)
|
||||
$EpochTime = [DateTime]"1/1/1970"
|
||||
$TimeZone = Get-TimeZone
|
||||
$UTCTime = $EpochTime.AddSeconds($intime)
|
||||
$UTCTime.AddMinutes($TimeZone.BaseUtcOffset.TotalMinutes)
|
||||
}
|
||||
|
||||
$GetDataTime = ConvertFrom-UnixTime $time[-1]
|
||||
|
||||
($hosts | where hostid -eq $host_id).host # получить имя хоста
|
||||
$UpTime # последнее полученное значение времени работы хоста
|
||||
$GetDataTime # время последнего полученного значения
|
||||
|
||||
# pki
|
||||
|
||||
New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName "$env:computername" -FriendlyName "Test Certificate" -NotAfter (Get-Date).AddYears(5) # создать самоподписанный сертификат (в LocalMachine\My - Сертификаты компьютера\Личное) с сроком действия 5 лет
|
||||
|
||||
Get-ChildItem -Path Cert:\CurrentUser\Root\ # список всех установленных сертификатов в хранилище Доверенные корневые ЦС Текущего пользователя
|
||||
Get-ChildItem -Path Cert:\CurrentUser\My\ # список самозаверяющих сертификатов в Личное хранилище Текущего пользователя
|
||||
Get-ChildItem -Path Cert:\LocalMachine\My\ # список самозаверяющих сертификатов в Личное хранилище Локального компьютера
|
||||
Get-ChildItem -Path Cert:\LocalMachine\My\ | select NotBefore,NotAfter,Thumbprint,Subject # срок действия сертификата
|
||||
Get-ChildItem -Path Cert:\LocalMachine\My\ | where Thumbprint -eq D9356FB774EE0E6206B7D5B59B99102CA5B17BDA # поиск сертификат по отпечатку
|
||||
|
||||
Get-ChildItem -Path $env:APPDATA\Microsoft\SystemCertificates\My\Certificates\ # сертификаты в файловой системе, каждый файл соответствует сертификату, установленному в личном хранилище текущего пользователя
|
||||
Get-ChildItem -Path $env:APPDATA\Microsoft\SystemCertificates\My\Keys\ # ссылки на объекты закрытых ключей, созданных поставщиком хранилища ключей (KSP)
|
||||
Get-ChildItem -Path HKCU:\Software\Microsoft\SystemCertificates\CA\Certificates | ft -AutoSize # список сертификатов в реестре вошедшего в систему пользователя
|
||||
|
||||
$cert = (Get-ChildItem -Path Cert:\CurrentUser\My\)[1] # выбрать сертификат
|
||||
$cert | Remove-Item # удалить сертификат
|
||||
|
||||
Export-Certificate -FilePath $home\Desktop\certificate.cer -Cert $cert # экспортировать сертификат
|
||||
$cert.HasPrivateKey # проверить наличие закрытого ключа
|
||||
$pass = "password" | ConvertTo-SecureString -AsPlainText -Force # создать пароль для шифрования закрытого ключа
|
||||
Export-PfxCertificate -FilePath $home\Desktop\certificate.pfx -Password $pass -Cert $certificate # экспортировать сертификат с закрытым ключем
|
||||
|
||||
Import-Certificate -FilePath $home\Desktop\certificate.cer -CertStoreLocation Cert:\CurrentUser\My # импортировать сертификат
|
||||
Import-PfxCertificate -Exportable -Password $pass -CertStoreLocation Cert:\CurrentUser\My -FilePath $home\Desktop\certificate.pfx
|
||||
|
||||
# OpenSSL
|
||||
|
||||
Invoke-WebRequest -Uri https://slproweb.com/download/Win64OpenSSL_Light-3_1_1.msi -OutFile $home\Downloads\OpenSSL-Light-3.1.1.msi
|
||||
Start-Process $home\Downloads\OpenSSL-Light-3.1.1.msi -ArgumentList '/quiet' -Wait # установить msi пакет в тихом режиме
|
||||
cd "C:\Program Files\OpenSSL-Win64\bin"
|
||||
|
||||
- Изменить пароль для PFX
|
||||
openssl pkcs12 -in "C:\Cert\domain.ru.pfx" -out "C:\Cert\domain.ru.pem" -nodes # экспортируем имеющийся сертификат и закрытый ключ в .pem-файл без пароля с указанием текущего пароля
|
||||
openssl pkcs12 -export -in "C:\Cert\domain.ru.pem" -out "C:\Cert\domain.ru_password.pfx" -nodes # конвертируем .pem обратно в .pfx c указанием нового пароля
|
||||
|
||||
- Конвертация из закрытого и открытого ключа PEM в PFX
|
||||
openssl pkcs12 -export -in "C:\tmp\vpn\vpn.itproblog.ru-crt.pem" -inkey "C:\tmp\vpn\vpn.itproblog.ru-key.pem" -out "C:\tmp\vpn\vpn.iiproblog.ru.pfx"
|
||||
in – путь до файла с открытым ключом
|
||||
inkey – путь до файла с закрытым ключом
|
||||
out – путь до файла, в который будет конвертирован сертификат (pfx)
|
||||
|
||||
- Конвертация PFX в CRT
|
||||
openssl pkcs12 -in "C:\OpenSSL-Win64\bin\_.domain.ru.pfx" -clcerts -out "C:\OpenSSL-Win64\bin\_.domain.ru.crt" # указывается текущий и 2 раза новый пароль PEM pass phrase (файл содержит EGIN CERTIFICATE и BEGIN ENCRYPTED PRIVATE KEY)
|
||||
openssl pkcs12 -in "C:\OpenSSL-Win64\bin\_.domain.ru.pfx" -clcerts -nokeys -out "C:\OpenSSL-Win64\bin\_.domain.ru.crt" # без ключа, получить открытую часть (файл содержит только EGIN CERTIFICATE)
|
||||
|
||||
- Конвертация PFX в KEY
|
||||
openssl pkcs12 -in "C:\OpenSSL-Win64\bin\_.domain.ru.pfx" -nocerts -out "C:\OpenSSL-Win64\bin\_.domain.ru.key" # файл содержит только BEGIN ENCRYPTED PRIVATE KEY
|
||||
|
||||
- Снять пароль к закрытого ключа .key
|
||||
openssl rsa -in "C:\OpenSSL-Win64\bin\_.domain.ru.key" -out "C:\OpenSSL-Win64\bin\_.domain.ru-decrypted.key"
|
||||
|
||||
- CRT и KEY в PFX:
|
||||
openssl pkcs12 -inkey certificate.key -in certificate.crt -export -out certificate.pfx
|
||||
|
||||
# OpenSSH
|
||||
|
||||
Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Client*'
|
||||
|
|
@ -4463,29 +4828,6 @@ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters # изме
|
|||
MaxFieldLength увеличить до 0000ffff (65535)
|
||||
MaxRequestBytes увеличить до 0000ffff (65535)
|
||||
|
||||
# pki
|
||||
|
||||
Get-ChildItem -Path Cert:\CurrentUser\Root\ # список всех установленных сертификатов в хранилище Доверенные корневые ЦС Текущего пользователя
|
||||
Get-ChildItem -Path Cert:\CurrentUser\My\ # список самозаверяющих сертификатов в Личное хранилище Текущего пользователя
|
||||
Get-ChildItem -Path Cert:\LocalMachine\My\ # список самозаверяющих сертификатов в Личное хранилище Локального компьютера
|
||||
Get-ChildItem -Path Cert:\LocalMachine\My\ | select NotBefore,NotAfter,Thumbprint,Subject # срок действия сертификата
|
||||
Get-ChildItem -Path Cert:\LocalMachine\My\ | where Thumbprint -eq D9356FB774EE0E6206B7D5B59B99102CA5B17BDA # поиск сертификат по отпечатку
|
||||
|
||||
Get-ChildItem -Path $env:APPDATA\Microsoft\SystemCertificates\My\Certificates\ # сертификаты в файловой системе, каждый файл соответствует сертификату, установленному в личном хранилище текущего пользователя
|
||||
Get-ChildItem -Path $env:APPDATA\Microsoft\SystemCertificates\My\Keys\ # ссылки на объекты закрытых ключей, созданных поставщиком хранилища ключей (KSP)
|
||||
Get-ChildItem -Path HKCU:\Software\Microsoft\SystemCertificates\CA\Certificates | ft -AutoSize # список сертификатов в реестре вошедшего в систему пользователя
|
||||
|
||||
$cert = (Get-ChildItem -Path Cert:\CurrentUser\My\)[1] # выбрать сертификат
|
||||
$cert | Remove-Item # удалить сертификат
|
||||
|
||||
Export-Certificate -FilePath $home\Desktop\certificate.cer -Cert $cert # экспортировать сертификат
|
||||
$cert.HasPrivateKey # проверить наличие закрытого ключа
|
||||
$pass = "password" | ConvertTo-SecureString -AsPlainText -Force # создать пароль для шифрования закрытого ключа
|
||||
Export-PfxCertificate -FilePath $home\Desktop\certificate.pfx -Password $pass -Cert $certificate # экспортировать сертификат с закрытым ключем
|
||||
|
||||
Import-Certificate -FilePath $home\Desktop\certificate.cer -CertStoreLocation Cert:\CurrentUser\My # импортировать сертификат
|
||||
Import-PfxCertificate -Exportable -Password $pass -CertStoreLocation Cert:\CurrentUser\My -FilePath $home\Desktop\certificate.pfx
|
||||
|
||||
# DSC
|
||||
|
||||
Import-Module PSDesiredStateConfiguration
|
||||
|
|
@ -4635,7 +4977,7 @@ path_user=/home/lifailon
|
|||
ansible_python_interpreter=/usr/bin/python3
|
||||
|
||||
[ws]
|
||||
huawei-01 ansible_host=192.168.3.99
|
||||
huawei-book-01 ansible_host=192.168.3.99
|
||||
plex-01 ansible_host=192.168.3.100
|
||||
|
||||
[ws:vars]
|
||||
|
|
@ -4652,7 +4994,7 @@ ansible_winrm_server_cert_validation=ignore
|
|||
validate_certs=false
|
||||
|
||||
[win_ssh]
|
||||
huawei-01 ansible_host=192.168.3.99
|
||||
huawei-book-01 ansible_host=192.168.3.99
|
||||
plex-01 ansible_host=192.168.3.100
|
||||
|
||||
[win_ssh:vars]
|
||||
|
|
@ -4701,7 +5043,7 @@ nano /etc/ansible/PowerShell-Vars.yml
|
|||
- name: Get port ssh
|
||||
win_shell: |
|
||||
Get-Content "C:\Programdata\ssh\sshd_config" | Select-String "{{SearchName}}"
|
||||
# Зарегистрировать вывод в переменную
|
||||
# Передать вывод в переменную
|
||||
register: command_output
|
||||
- name: Output port ssh
|
||||
# Вывести переменную на экран
|
||||
|
|
@ -5050,57 +5392,3 @@ nano /etc/ansible/win-update.yml
|
|||
var: wu_output
|
||||
|
||||
ansible-playbook /etc/ansible/win-update.yml
|
||||
|
||||
# Jenkins
|
||||
|
||||
nano /etc/apt/sources.list.d/jenkins.list
|
||||
deb [trusted=yes] https://pkg.jenkins.io/debian binary/
|
||||
apt-get update
|
||||
apt-get install -y fontconfig openjdk-11-jre
|
||||
apt-get install -y jenkins
|
||||
systemctl status jenkins
|
||||
cat /var/lib/jenkins/secrets/initialAdminPassword
|
||||
|
||||
Item - Freestyle
|
||||
This build is parameterized - Add Parameter - String Parameter - ProcessName
|
||||
Add build step - PowerShell
|
||||
Command:
|
||||
pwsh -command Get-Process -name *$env:ProcessName*
|
||||
|
||||
Item - Pipeline
|
||||
SCM - Git
|
||||
Repository URL: https://github.com/Lifailon/Deploy-PS-Module.git
|
||||
Branch: */rsa
|
||||
Script Path: Win-Get-Service/jenkinsfile.groovy
|
||||
|
||||
### jenkinsfile.groovy
|
||||
|
||||
pipeline {
|
||||
agent any
|
||||
parameters {
|
||||
string(name: "ServiceName", defaultValue: "WinRM", trim: true, description: "Введите имя службы") // создать параметр
|
||||
}
|
||||
stages {
|
||||
stage('Before Deploy Version') {
|
||||
steps {
|
||||
echo "Имя выбранной службы: $params.ServiceName"
|
||||
sh "ansible-playbook Win-Get-Service/Get-Service.yml -e ServiceName=$params.ServiceName" // передать параметр на вход переменной playbook
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
### Get-Service.yml
|
||||
|
||||
- name: win_powershell
|
||||
vars:
|
||||
ServiceName: WinRM
|
||||
hosts: ws
|
||||
tasks:
|
||||
- name: Run PowerShell Commands
|
||||
win_shell: |
|
||||
Get-Service *"{{ServiceName}}"*
|
||||
register: command_output
|
||||
- name: Command Output
|
||||
debug:
|
||||
var: command_output.stdout_lines
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue