среда, 12 октября 2022 г.

hyper-v manager standalone server

#on server
#Enable-PSRemoting
#Enable-WSManCredSSP -Role server

$ethint="Ethernet"
$hvservername="r-hv1"
$hvserverip="192.168.126.50"

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Tools-All -All
Set-NetConnectionProfile -InterfaceAlias $ethint -NetworkCategory Private
Add-Content -Path C:\Windows\System32\drivers\etc\hosts -Value "`n"$hvserverip"`t"$hvservername
winrm quickconfig
Set-Item WSMan:\localhost\Client\TrustedHosts -Value $hvservername
Enable-WSManCredSSP -Role client -DelegateComputer $hvservername
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\" -Name 'CredentialsDelegation'
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation\" -Name 'AllowFreshCredentialsWhenNTLMOnly' -PropertyType DWord -Value "00000001"
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation\" -Name 'ConcatenateDefaults_AllowFreshNTLMOnly' -PropertyType DWord -Value "00000001"
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation\" -Name 'AllowFreshCredentialsWhenNTLMOnly'
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation\AllowFreshCredentialsWhenNTLMOnly\" -Name '1' -Value "wsman/$hvservername"

Ратнер Арсений, arsenyratner@gmail.com, 7 985 273 2090

пятница, 16 сентября 2022 г.

Самоподписанный сертификат сроком на 10 лет

New-SelfSignedCertificate `
-DnsName "r-hv1.r.ratners.online" `
-KeyAlgorithm RSA `
-KeyLength 2048 `
-CertStoreLocation "Cert:\LocalMachine\My" `
-NotAfter (Get-Date).AddYears(10)
 
Ратнер Арсений, arsenyratner@gmail.com, 7 985 273 2090

четверг, 15 сентября 2022 г.

1C Сброс пароля с postgresql

Сохраняем скрипт.
Запускаем с указанием имени БД
Скрипт переименовывает таблицу v8users и файл users.usr и предлагает запустить 1С конфигуратор.
Запускаем конфигуратор, после этого даём скрипту продолжить.
Он возвращает на место таблицу и файл.

[CmdletBinding()]
param(
    [String]$dbname="",
    [String]$PG_DIR='C:\Program Files\PostgresPro 1C\9.4',
    [String]$PSQL="$PG_DIR\bin\psql.exe",
    [String]$dbserver='localhost',
    [String]$dbuser='postgres',
    [String]$dbpassword='pass'
)

Write-Verbose -message dbname=$dbname
Write-Verbose -message PSQL=$PSQL
Write-Verbose -message dbserver=$dbserver
Write-Verbose -message dbuser=$dbuser
Write-Verbose -message dbpassword=$dbpassword

$env:PGPASSWORD = $dbpassword
$env:PGUSER = $dbuser
$env:PGHOST = $dbserver

Write-Verbose -message "Checking -dbname is set $dbname"
if ($dbname -eq "") {
Write-Host "-dbname not set"
exit
}

Write-Verbose -message "Rename table v8users"
& $PSQL --dbname $dbname -c "ALTER TABLE v8users RENAME TO v8users_bak;"
Write-Verbose -message "Rename file users.usr"
& $PSQL --dbname $dbname -c "UPDATE Params SET FileName='users.usr_bak' WHERE FileName='users.usr';"
Write-Host "Run 1C Configurator and press any key and enter"
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown');

Write-Verbose -message "Drop table v8users"
& $PSQL --dbname $dbname -c "DROP TABLE v8users;"
Write-Verbose -message "Rename table v8users_bak -> v8users"
& $PSQL --dbname $dbname -c "ALTER TABLE v8users_bak RENAME TO v8users;"
Write-Verbose -message "Rename file users.usr_bak -> users.usr"
& $PSQL --dbname $dbname -c "UPDATE Params SET FileName='users.usr' WHERE FileName='users.usr_bak';"

Ратнер Арсений, arsenyratner@gmail.com, 7 985 273 2090

четверг, 1 сентября 2022 г.

Обновляем iDrac

-g : use TFTP download process for firmware update (use with -u)
-u : perform firmware update operation (used with -g)
-a : specifies TFTP server IP address used for firmware image (used with -g)
-d : specifies source path where firmware image exists (default is local)
-s : query for current firmware update process status
-r : rollback to the standby firmware

по ftp
racadm fwupdate -f 10.80.111.110 ftp FtpFtp -d /pub/tftproot/283/firmimg.d7

по tftp
racadm fwupdate -g -u -a 10.80.111.110 -d /283

Полезные команды
racadm getversion
racadm fwupdate -s

Ратнер Арсений, arsenyratner@gmail.com, 7 985 273 2090

четверг, 25 августа 2022 г.

Windows синхронизация времени и наблюдение за расхождением

Посмотреть текущий статус, от туда же возьмём имя сервера с которым будем сравнивать своё время
w32tm /query /status

Примерно раз в секунду сравнивает локальное время со временем сервера, возвращает разницу в секундах.
w32tm /stripchart /dataonly /computer:ИМЯСЕРВЕРА

После этой команды видно как разница в локальном времени и времени сервера начинает сокращаться.
w32tm /resync /rediscover

Установить список серверов с которыми следует синхронизировать время.
w32tm.exe /config /manualpeerlist:"time.nist.gov,0x8 time.windows.com,0x8 pool.ntp.org,0x8" /syncfromflags:manual /reliable:yes /update

Ратнер Арсений, arsenyratner@gmail.com, 7 985 273 2090

пятница, 29 апреля 2022 г.

Распковать сто вложенных архивов

Разархивировать разархивированный файл до тех пор пока в имени разархивированного файла есть tar.gz

arc=$(tar xzfv /home/admin/archive.tar.gz)
while [[ $arc =~ "tar.gz" ]]; do arc=$(tar xzfv $arc) done

Ратнер Арсений, arsenyratner@gmail.com, 7 985 273 2090

пятница, 14 января 2022 г.

Centos 7 L2TP xl2tpd strongswan

С Centos 7 есть проблема с настройкой впн подключения с помощью NetworkManager, т.к. он использует libreswan, а тот, в свою очередь, перестал поддерживать устаревшие алгоритмы шифрования: 3des, modp1024. Можно настроить постоянное подключение по l2tp как это сделать текст ниже:


# yum -y install epel-release

# yum -y install strongswan xl2tpd

# systemctl enable strongswan xl2tpd


VPN_SERVER='vpn.dom.ru' # адрес сервера

VPN_IPSEC_PSK='larhe4rtdfkjgh8340' # общий l2tp секрет

VPN_USER='user1' # имя пользователя

VPN_PASSWORD='P@ssword1' # пароль пользователя

VPN_CONN='dom' # имя подключения


cat > /etc/strongswan/ipsec.conf <<EOF

# ipsec.conf - strongSwan IPsec configuration file

conn %default

  ikelifetime=60m

  keylife=20m

  rekeymargin=3m

  keyingtries=0

  keyexchange=ikev1

  authby=secret

  ike=3des-sha1-modp1024,aes128-sha1-modp1024!

  esp=3des-sha1-modp1024,aes128-sha1-modp1024!


conn $VPN_CONN

  auto=start

  type=transport

  left=%defaultroute

  rightprotoport=17/1701

  right=$VPN_SERVER

  rightid=%any

  ike=3des-sha1-modp1024!

  esp=3des-sha1!

EOF


cat > /etc/strongswan/ipsec.secrets <<EOF

: PSK "$VPN_IPSEC_PSK"

EOF

chmod 600 /etc/strongswan/ipsec.secrets


cat > /etc/xl2tpd/xl2tpd.conf <<EOF

[lac $VPN_CONN]

lns = $VPN_SERVER

ppp debug = no

pppoptfile = /etc/ppp/options.l2tpd.client

length bit = yes

redial = yes

autodial = yes

EOF


cat > /etc/ppp/options.l2tpd.client <<EOF

ipparam $VPN_CONN

ipcp-accept-local

ipcp-accept-remote

refuse-eap

require-chap

noccp

noauth

mtu 1280

mru 1280

noipdefault

usepeerdns

connect-delay 5000

name "$VPN_USER"

password "$VPN_PASSWORD"

EOF

chmod 600 /etc/ppp/options.l2tpd.client


cat > /etc/ppp/ip-up.local << EOF

#!/bin/bash

PATH=/sbin:/usr/sbin:/bin:/usr/bin

export PATH

LOG=/tmp/ip-up.local.log

DSTNETS="10.4.108.0/24 10.32.0.0/16 10.33.70.0/24 10.70.1.0/24 10.80.0.0/16 10.88.0.0/16 10.89.0.0/16 10.90.0.0/24 10.91.0.0/16 10.208.1.0/24 10.254.0.0/16"

DEV=\$1

TTY=\$2

SPEED=\$3

LOCALIP=\$4

REMOTEIP=\$5

IPPARAM=\$6


f_$VPN_CONN () {

  for i in \$DSTNETS; do

  ip route add \$i dev \$DEV

  done

}

case \$IPPARAM in

"$VPN_CONN")

  f_$VPN_CONN

  ;;

"*")

  ;;

esac

exit 0

EOF

chmod a+x /etc/ppp/ip-up.local


systemctl restart strongswan xl2tpd


Ратнер Арсений, arsenyratner@gmail.com, 7 985 273 2090

среда, 15 декабря 2021 г.

Список баз 1С для всех

файл который надо положить в %appdata%\1c\1cestart
\\corp.org.ru\1c\cfg\1cestart.cfg
CommonCfgLocation= \\corp.dom.ru\1c\cfg\1CESCmn.cfg
UseHWLicenses=0
AppAutoInstallLastVersion=0
файл в котором перечислены все ИБ
\\corp.dom.ru\1c\cfg\1cescmn.cfg
CommonInfoBases=\\corp.dom.ru\1c\v8i\org-buh-arc-20180831.v8i
CommonInfoBases=\\corp.dom.ru\1c\v8i\org-buh.v8i
CommonInfoBases=\\corp.dom.ru\1c\v8i\org-doc.v8i
CommonInfoBases=\\corp.dom.ru\1c\v8i\org-zup-arc-20180702.v8i
CommonInfoBases=\\corp.dom.ru\1c\v8i\org-zup.v8i
файл с информацией для генерации файлов v8i
\\corp.dom.ru\1c\cfg\v8i_utf8.csv
IB;SRV;IBFN;ORG;CONF;Prod;Description
org-buh-arc-20180831;org-v-1c;Организация Бух Архив 20180831;Организация;Бух;Архив;20180831
org-buh;org-v-1c;Организация Бух;Организация;Бух;;
org-doc;org-v-1c;Организация СЭД;Организация;СЭД;;
org-zup-arc-20180702;org-v-1c;Организация ЗУП Архив 20180702;Организация;ЗУП;Архив;20180702
org-zup;org-v-1c;АТИС ЗУП;АТИС;ЗУП;;
скрипт который генерит файлы v8i. группы в АД, назначает соответствующие разрешения
1c_v8igen.ps1
#$VerbosePreference = "Continue"
$IBListCSV = "\\corp.dom.ru\1c\cfg\v8i_utf8.csv"
$v8iPath = "\\corp.dom.ru\1c\v8i"
$1CECmn = "\\corp.dom.ru\1c\cfg\1CESCmn.cfg"
$CsvEncoding = "utf8"
Write-Verbose -message "$IBListCSV"
Write-Verbose -message "$v8iPath"
$OUPath = "ou=v8i,ou=1c,ou=Группы доступа,dc=corp,dc=org,dc=ru"

$Template = '[%IBFN%]
Connect=Srvr="%SRV%";Ref="%IB%";
Folder=/
External=0
ClientConnectionSpeed=Normal
App=Auto
WA=1
Version=8.3
AppArch=x86
'

Write-Verbose -message "ActiveDirectory module check "
if (Get-Module -ListAvailable -Name ActiveDirectory) {
    Write-Verbose -message "ActiveDirectory module installed"
}
else {
    Write-Host "ActiveDirectory module not installed try"
Write-Host "Install-WindowsFeature -Name ""RSAT-AD-PowerShell"" -IncludeAllSubFeature"
exit
}

$IBList = Import-Csv -Path "$IBListCSV" -Encoding $CsvEncoding -Delimiter ";"
$v8iAll = "$($v8iPath)\_All.v8i"
Out-File -Encoding utf8 -FilePath "$v8iAll"
Out-File -Encoding utf8 -FilePath "$1CECmn"

ForEach ($IB in $IBList) {
Write-Verbose -message $IB.IBFN
$NewTemplate = $Template -replace "%IBFN%", $IB.IBFN
Write-Verbose -message $IB.SRV
$NewTemplate = $NewTemplate -replace "%SRV%", $IB.SRV
Write-Verbose -message $IB.IB
$NewTemplate = $NewTemplate -replace "%IB%", $IB.IB
Write-Verbose -message "$v8i"
$v8i = "$($v8iPath)\$($IB.IB).v8i"
$NewTemplate | Out-File -Encoding utf8 -FilePath $v8i
$NewTemplate | Out-File -Append -Encoding utf8 -FilePath $v8iAll
"CommonInfoBases=$v8i" | Out-File -Append -Encoding utf8 -FilePath $1CECmn
$GroupName = "DL_v8i_$($IB.IB)_RO"
Write-Verbose -message "$chekGroup"
if ( $(Get-ADGroup -LDAPFilter "(sAMAccountName=$GroupName)") -eq $null ) {
Write-Verbose -message "Create $GroupName"
New-ADGroup -Name $GroupName -Path $OUPath -GroupScope Global -GroupCategory Security
}
Write-Verbose -message "Update $GroupName"
Set-ADGroup -Identity $GroupName -Replace @{
info="Path=$v8i; aclType=Read"
Description = "$($IB.IBFN)"
}
Write-Verbose -message "$GroupName addMember DL_v8i_all"
Add-ADGroupMember -Identity $GroupName -Members DL_v8i_all
Write-Verbose -message "DL_1c_list addMember $GroupName"
Add-ADGroupMember -Identity DL_1c_list -Members $GroupName
Write-Verbose -message "Get-ACL $v8i"
$acl = Get-Acl -Path $v8i
Write-Verbose -message "Setup Permissions"
$permission = "MLG\$GroupName", 'Read', 'Allow'
Write-Verbose -message "Setup Rule"
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($permission)
Write-Verbose -message "Setup Acl"
$acl.SetAccessRule($rule)
Write-Verbose -message "Save Acl to $v8i"
$acl | Set-Acl -Path $v8i
}

Что проиcходит?
Скрипт читает CSV
(IB - берёт из колонки IB csv файла)
Создаёт файл IB.v8i 
Создаёт группу в АД с именем DL_v8i_IB_read
Назначает этой группе разрешение read на файл v8i
Добавляет группу в другие группы.
Осталось создать GPO которое будет заменять файл %appdata%\1c\1cestart\1cestart.cfg файлом \\corp.org.ru\1c\cfg\1cestart.cfg

Ратнер Арсений, arsenyratner@gmail.com, 7 985 273 2090

Dell MD32xx Disk Group failed

Случилось, видимо из-за того что не был соблюдён порядок включения полок
Все дисковые группы которые были на полке 1220, подключенной к 3200, были в состоянии Failed.
Все жёсткие диски в состоянии Optimal
Ни один не вынимался и не менялись местами.
Решил попробовать "возродить" дисковую группу с помощью команды:
Возвродить дисковую группу.
smcli -n ИмяПолки -c "revive diskgroup[ИмяГруппы];"
Получить список полок:
smcli -d -i

После этого группа перешла в режим восстановления и диск снова стал доступен на кластере. 

1С. Восстановление из резервной копии бд postgres

# .\1c_pg_restore.ps1 -verbose -dbname buh-new-20211130-1129 -dumpfile e:\tmp\buh-new__20211130-112901.backup

[CmdletBinding()]
param(
    [String]$dbname="",
    [String]$dumpfile="",
    [String]$PG_DIR='C:\Program Files\PostgreSQL 1C\12\',
    [String]$CREATEDB="$PG_DIR\bin\createdb.exe",
    [String]$PGRESTORE="$PG_DIR\bin\pg_restore.exe",
    [String]$PSQL="$PG_DIR\bin\psql.exe",
    [String]$dbserver='localhost',
    [String]$dbuser='postgres',
    [String]$dbpassword='password'
)

Write-Verbose -message dbname=$dbname
Write-Verbose -message CREATEDB=$CREATEDB
Write-Verbose -message PGRESTORE=$PGRESTORE
Write-Verbose -message PSQL=$PSQL
Write-Verbose -message dbserver=$dbserver
Write-Verbose -message dbuser=$dbuser
Write-Verbose -message dbpassword=$dbpassword

$env:PGPASSWORD = $dbpassword
$env:PGUSER = $dbuser
$env:PGHOST = $dbserver

Write-Verbose -message "Check -dbname is set $dbname"
if ($dbname -eq "") {
Write-Host "-dbname not set"
exit
}
Write-Verbose -message "Check -dumpfile is set $dumpfile"
if ($dumpfile -eq "") {
Write-Host "-dumpfile not set "
exit
} else {
Write-Verbose -message "Check existance $dumpfile"
if (!(Test-Path $dumpfile)) {
Write-Host $dumpfile does not exist
exit
}
}
Write-Verbose -message "Check existance $dbname"
# $dblist = &$PSQL --host=$dbserver --username=$dbuser --dbname $dbname -c "\q" 2>&1
$dblist = &$PSQL --dbname $dbname -c "\q" 2>&1
if ($LastExitCode -eq 0) {
Write-Host "$dbname alredy exists, exiting"
exit
}
Write-Verbose -message "$dbname Creating db"
$createdbparams = "--encoding=utf8 --template=template1 --locale=ru_RU.UTF-8 --lc-collate=ru_RU.UTF-8 --lc-ctype=ru_RU.UTF-8 --encoding=UTF8"
$result = & $CREATEDB $dbname $createdbparams
if ($LastExitCode -ne 0) {
Write-Host "$dbname can not create, exiting"
exit
}
Write-Verbose -message "$dbname restoring db $PGRESTORE -d $dbname"
$result = & $PGRESTORE --dbname=$dbname $dumpfile 2>&1
if ($LastExitCode -ne 0) {
Write-Host "$dbname not restored, exiting"
exit
}
Write-Verbose -message "$dumpfile restored to $dbname"


Ратнер Арсений, arsenyratner@gmail.com, 7 985 273 2090

вторник, 30 ноября 2021 г.

Последняя версия скрипта для бекапа 1С # PowerShell.exe -ExecutionPolicy Bypass -File C:\!Scripts\1c_pg_backup.ps1 # powershell -windowstyle minimized -c "powershell -c C:\!Scripts\1c_pg_backup.ps1 -verbose >> C:\!Scripts\1c_pg_backup.log *>&1" [CmdletBinding()] param( [String]$dbname="", [String]$dumpdir= 'E:\\tmp\\backup', [String]$PG_DIR='C:\Program Files\PostgreSQL 1C\12\', [String]$PGDUMP="$PG_DIR\bin\pg_dump.exe", [String]$PSQL="$PG_DIR\bin\psql.exe", [String]$dbserver='localhost', [String]$dbuser='postgres', [String]$dbpassword='Passw0rD', [String]$separateconfig="" ) Write-Verbose -message dbname=$dbname Write-Verbose -message dumpdir=$dumpdir Write-Verbose -message PGDUMP=$PGDUMP Write-Verbose -message PSQL=$PSQL Write-Verbose -message dbserver=$dbserver Write-Verbose -message dbuser=$dbuser Write-Verbose -message dbpassword=$dbpassword Write-Verbose -message datestamp=$datestamp $excludedb="('template0','template1','postgres')" # $excludedb="('template0','template1','postgres','atis-buh-new','atis-doc','mon-buh','mon-zup','ml-buh','ml-zup')" $sql_listdb="select datname from pg_database where not datname in $excludedb order by datname;" $env:PGPASSWORD = $dbpassword $datestamp = Get-Date -UFormat "%Y%m%d-%H%M%S" $alldbdir = "$dumpdir\\pgsql" $IPCUser = "Administrator" # Authentication $IPCPwd = "media!!2004" # for IPC$ share $DstHost = "backupserver" # robocopy dest $DstDir = "D$\1C\pgsql" # robocopy dest $SrcDir = "E:\tmp\backup\pgsql" # robocopy source $LogPath = "C:\!Scripts\1c_rbcp.log" # robocopy log $Params = "/E" # Robocopy params Write-Verbose -message "Проверяем указана ли база данных для копирования" if ($dbname -eq "") { Write-Verbose -message "Проверяем, существует ли папка $alldbdir" if(!(Test-Path -Path $alldbdir )){ Write-Verbose -message "Cоздаём папку $dumpdir" New-Item -ItemType directory -Path $alldbdir | Out-Null } else { Write-Verbose -message "Удаляем папку с дампами" Remove-Item -path $alldbdir -Force -Recurse | Out-Null New-Item -ItemType directory -Path $alldbdir | Out-Null } Write-Verbose -message "Делаем дамп каждой БД кроме $excludedb" $dblist = &$PSQL -t -h $dbserver -U $dbuser -c $sql_listdb foreach($db in $dblist) { $db = $db.TrimStart() if ($db -ne "") { $dbname=$db Write-Verbose -message "Делаем дамп БД $dbname" # &$PGDUMP -h $dbserver -U $dbuser --dbname=$dbname --file=$alldbdir\$($dbname)__$datestamp.sql.gz --compress=1 &$PGDUMP -Fc -b -h $dbserver -U $dbuser --dbname=$dbname --file=$alldbdir\$($dbname)__$datestamp.backup } Write-Verbose -message "Создание дампов завершено" Write-Verbose -message "Начинаем копирование дампов robocopy" Write-Verbose -message "Авторизуемся на $DstHost" NET USE \\$DstHost\ipc$ /U:"$IPCUser" $IPCPwd Write-Verbose -message "Копируем $SrcDir на \\$DstHost\$DstDir" robocopy.exe /NP $SrcDir \\$DstHost\$DstDir\ $Params /UNILOG:$LogPath Write-Verbose -message "Отключаемся от $DstHost" NET USE \\$DstHost\ipc$ /D Write-Verbose -message "Выполнение завершено" } else { if(!(Test-Path -Path $dumpdir\$dbname )){ Write-Verbose -message "Cоздаём папку $dumpdir\$dbname" New-Item -ItemType directory -Path $dumpdir\$dbname | Out-Null } else { Write-Verbose -message "Удаляем папку с дампами" Remove-Item -path $dumpdir\$dbname -Force -Recurse | Out-Null New-Item -ItemType directory -Path $dumpdir\$dbname | Out-Null } Write-Verbose -message "Добавляем разрешения для Network Service" $acl = Get-Acl "$dumpdir\$dbname" $ar = New-Object System.Security.AccessControl.FileSystemAccessRule("NT AUTHORITY\NETWORK SERVICE","FullControl","Allow") $acl.SetAccessRule($ar) $acl | Set-Acl "$dumpdir\$dbname" if ($separateconfig -eq "" ) { Write-Verbose -message "Делаем дамп указанной БД $dbname в $dumpdir\\$($dbname)__$datestamp.sql.gz" #&$PGDUMP -h $dbserver -U $dbuser --dbname=$dbname --file=$dumpdir\\$($dbname)\\$($dbname)__$datestamp.sql.gz --compress=1 &$PGDUMP -Fc -b -h $dbserver -U $dbuser --dbname=$dbname --file=$dumpdir\\$($dbname)\\$($dbname)__$datestamp.backup } else { # Write-Verbose -message "$PGDUMP -h $dbserver -U $dbuser --dbname=$dbname --file=$dumpdir\$dbname\$dbname-config-scheme__$datestamp.sql -s -t config" Write-Verbose -message "Делаем дамп схемы $dbname таблицы config scheme $dumpdir\$dbname\$dbname-config-scheme__$datestamp.sql" &$PGDUMP -h $dbserver -U $dbuser --dbname=$dbname --file=$dumpdir\$dbname\$dbname-config-scheme__$datestamp.sql -s -t config #Write-Verbose -message "$PSQL -h $dbserver -U $dbuser --dbname=$dbname -c ""COPY public.config TO '$dumpdir\\$dbname\\$dbname-config-datafile__$datestamp.bin' WITH BINARY;""" Write-Verbose -message "Делаем бинарный дамп $dbname таблицы config binary $dumpdir\\$dbname\\$dbname-config-datafile__$datestamp.bin" &$PSQL -h $dbserver -U $dbuser --dbname=$dbname -c "COPY public.config TO '$dumpdir\\$dbname\\$dbname-config-datafile__$datestamp.bin' WITH BINARY;" # Write-Verbose -message "$dumpdir\$($dbname)__$datestamp.sql.gz -T config --compress=1" Write-Verbose -message "Делаем частичный дамп $dbname без config $dumpdir\$dbname\$($dbname)__$datestamp.sql.gz" &$PGDUMP -h $dbserver -U $dbuser --dbname=$dbname --file=$dumpdir\$dbname\$($dbname)__$datestamp.sql.gz -T config --compress=1 } }

пятница, 26 ноября 2021 г.

IPSEC Mikrotik Strongswan

Strongswan:
config setup                                                                                                                                    
        charondebug="all"
        uniqueids=yes
conn con1
        # ike=blowfish-sha1-modp1024!
        # esp=blowfish-sha1!
        ike=aes256-sha256-modp2048!
        esp=aes256-sha256!
        aggressive=no
        keyingtries=%forever
        ikelifetime=28800s
        lifetime=3600s
        dpddelay=30s
        dpdtimeout=120s
        dpdaction=restart
        keyexchange=ikev1
        authby=secret
        type=tunnel
        leftid=%net_behind_mktk%
        left=%net_behind_mktk%
        leftsubnet=%net_behind_mktk%/32
        rightid=%mktk_inet_ip%
        right=%mktk_inet_ip%
        # rightsubnet=%1_net_behind_mktk%,%2_net_behind_mktk%
conn con1-1
        also=mlg1
        rightsubnet=%1_net_behind_mktk%
        auto=start
conn con1-2
        also=mlg1
        rightsubnet=%2_net_behind_mktk%
        auto=start
Mikrotik:
/ip ipsec profile add \
  enc-algorithm=aes-256 \
  hash-algorithm=sha256 \
  name=strongswan
/ip ipsec peer add \
  address=%linux_inet_ip% \
  local-address=%mktk_inet_ip% \
  name=strongswan \
  profile=strongswan \
  send-initial-contact=no
/ip ipsec proposal add \
  auth-algorithms=sha256 \
  enc-algorithms=aes-256-cbc \
  lifetime=1h \
  name=strongswan \
  pfs-group=modp2048
/ip ipsec identity add \
  notrack-chain=prerouting \
  peer=strongswan \
  secret=%PSK%
/ip ipsec policy add \
  dst-address=%net_behind_linux% \
  sa-dst-address=%linux_inet_ip% \
  sa-src-address=%mktk_inet_ip% \
  src-address=%1_net_behind_mktk% \
  level=unique \
  proposal=strongswan \
  tunnel=yes
/ip ipsec policy add \
  dst-address=%net_behind_linux% \
  sa-dst-address=%linux_inet_ip% \
  sa-src-address=%mktk_inet_ip% \
  src-address=%2_net_behind_mktk% \
  level=unique \
  proposal=strongswan \
  tunnel=yes

Ратнер Арсений, arsenyratner@gmail.com, 7 985 273 2090

четверг, 18 ноября 2021 г.

Инвентаризация подключенных информационных баз 1с на компьютерах в домене

Сначала получим список всех компьютеров
Get-ADComputer -Filter * -Properties * | 
 Select -Property Name,DNSHostName,Enabled,LastLogonDate,operatingSystem |
 Export-CSV "C:\Users\Public\Documents\AllComputers.csv" -Delimiter ';' -Encoding UTF8 -NoTypeInformation

Проходим по списку компьютеров и копируем файлы AppData\Roaming\1C\1CEStart\ibases.v8i в одну папку. Можно скрипт добавить в планировщик, он будет собирать файлы по расписанию чтобы обработать компьютеры которые в данный момент были выключены. 
$port=445
$timeout=100
$VerbosePreference = "Continue"
#$VerbosePreference = "SilentlyContinue"
$dst = 'C:\Users\Public\Documents\ibases'
$csv = 'C:\Users\Public\Documents\ibases.csv'
$compList = Get-Content "C:\Users\Public\Documents\computerlist.txt"
foreach ($comp in $compList) {
  $requestCallback = $state = $null
  $client = New-Object System.Net.Sockets.TcpClient
  $beginConnect = $client.BeginConnect($comp,$port,$requestCallback,$state)
  Start-Sleep -milli $timeOut
  $src = "\\$comp\c$\users\"
  if ($client.Connected) {
    #write-verbose -Message "$comp connected"
$ibasespath = '\AppData\Roaming\1C\1CEStart\ibases.v8i'
$GC = Get-ChildItem $src
    # where{$_.name -notcontains 'Public' -and $_.name -notcontains 'Default'}
    ForEach ($user in $GC) {
        $v8i = "$($src)$($user)$($ibases_path)"
        if (Test-Path -Path "$v8i") {
            write-verbose -Message "Copy $v8i to $dst\$($user)_$($comp)_ibases.txt"
            Copy-Item -Path $v8i -Destination "$dst\$($user)_$($comp)_ibases.txt"
            Parse-Config -ConfigFilePath $v8i
        } else {
            Write-Verbose -Message "Not found: $($src)$($user)$($ibases_path)"
        }
  }
  } else {
  Write-Verbose -Message "$comp - connection failed"
  }
  $client.Close()
}

Соберём информацию из файлов в один csv
$VerbosePreference = "Continue"
$dst = 'C:\Users\Public\Documents\ibases\'
$csv = 'C:\Users\Public\Documents\ibases2.csv'
$comp = ''

Function parse-v8i {
    param (
        $v8iFilePath
    )
    $dbfn = ''
    $srv = ''
    $db = ''
   
    $ConfigContent = Get-Content $v8iFilePath -Encoding UTF8
    $IBases = $ConfigContent | ForEach-Object {
        if ($_ -match '(?''dbfn''^\[.+\]$)'){
            $dbfn = $Matches['dbfn']
        }
        if ($_ -match 'Connect=Srvr="(?''Srv''[^"]+)";Ref="(?''db''[^"]+)";'){
            $srv = $Matches['srv']
            $db = $Matches['DB']
        }
        if ($db -and $dbfn -and $srv){
            $content=[pscustomobject]@{
                DBFN = $dbfn
                SRV = $srv
                IB = $db
                filename = $file
            }
            $dbfn = ''
            $srv = ''
            $db = ''
            $content | Export-Csv -Path $csv -Delimiter ';' -Encoding UTF8 -NoTypeInformation -Append
        }
    }
}

$GC = Get-ChildItem $dst
ForEach ($file in $GC) {
  $v8i = "$($dst)$($file)"
  write-verbose -Message "Parse $v8i"
  Parse-Config -v8iFilePath $v8i
}


Ратнер Арсений, arsenyratner@gmail.com, 7 985 273 2090

Генератор паролей apg или wapg для Windows

 -n15 -EOI10l -a0 -m 10 -x 10 -MNCL -c cl_seed
Генерирует 15 произносимых паролей 
Без неоднозначных символов O, I, 1, 0, l

Ратнер Арсений, arsenyratner@gmail.com, 7 985 273 2090

среда, 10 ноября 2021 г.

Не пускает доменных пользователей OL8 Centos 8

Не пускает доменных пользователей:
journalctl -f 
pam_sss(sshd:auth): authentication success; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.20.81 user=admin.appc
pam_sss(sshd:account): Access denied for user admin.appc: 4 (System error)
Failed password for admin.appc from 192.168.20.81 port 52914 ssh2
fatal: Access denied for user admin.appc by PAM account configuration [preauth]

Решение:
Добавить в sssd.conf 
[domain/.....]
ad_gpo_access_control = disabled

Ратнер Арсений, arsenyratner@gmail.com, 7 985 273 2090