--- /dev/null
+#!/bin/bash
+#
+# https://dzen.ru/a/ZXWKq1L35Em2EHex?ysclid=mlt10qkrsb471483043
+#
+# Use: ./ROSdiff.sh RoutrName SSH_IP SSH_Port
+# Last Backups: ls -l $backuppath
+# History: ls -l $backuppath/history
+# Add to cron
+# crontab -e
+# 0 20 * * * /var/www/ros.vados.ru/Mikrotiks/.bin/ROSdiff.sh MikroMaster 10.30.30.81 2222
+#
+
+routers=( 10.30.30.10 10.30.30.81 )
+
+date=$(date +%d-%m-%Y)
+time=$(date +%H-%M)
+
+GEN_DATE=$(date '+%Y-%m-%d %H:%M:%S %z')
+DTStamp=$(date '+%Y%m%d%H%M%S')
+
+SSHhost="undefined"
+SSHport="2222"
+SSHuser="mikro_bak"
+SSHpassword="Peskar55"
+
+BaseDir="/var/www/ros.vados.ru/Mikrotiks"
+#$HOME
+
+HostsFile="${BaseDir}/.mikrotiks"
+BackupDir="${BaseDir}/backups"
+BackTemp="${BackupDir}/tmp"
+
+Log="undefined"
+RouterName="undefined"
+
+SSH_KEY=$BaseDir"/.ssh/id_rsa"
+SSH_OPTS="-i $SSH_KEY -o PasswordAuthentication=no -p $SSHport"
+# Require router-specific SSH key
+if [ ! -f "$SSH_KEY" ]; then
+ echo "Error: SSH key not found at $SSH_KEY"
+ echo "Run ./setup-ssh-keys.sh to generate the key"
+ exit 1
+fi
+###############################
+# Backup listing
+###############################
+# Get Names Addresses and Ports
+# for SSHhost in $( cat $HostsFile ); do
+#IFS=$'\n' # make newlines the only separator
+readarray -t lines < $HostsFile
+set -f
+for HR in "${lines[@]}"; do
+while IFS=$' ' read -a line || [ -n "$line" ]; do
+[[ -z ${line[0]} ]] && continue
+${BaseDir}/.bin/rdiff.sh ${line[0]} ${SSHuser} ${line[1]} ${line[2]}
+#echo ${line[0]}
+#echo ${SSHuser}
+#echo ${line[1]}
+#echo ${line[2]}
+#readarray -t lines < $HostsFile
+
+#while IFS=" " read -r "${lines[@]}" -a line ; do
+
+#for line in "${lines[@]}";
+#do
+# echo "$line"
+done <<<"$(echo -e $HR)"
+done
+exit 0
+
+#cat $HostsFile | while IFS=" " read -a line ; do
+# || [ -n "$line" ]; do
+#[[ -z ${line[0]} ]] && continue
+
+for SSHhost in ${routers[@]}; do
+RouterName=$(ssh ${SSH_OPTS} ${SSHuser}@${SSHhost} /system/identity/get name | echo $1);
+# awk '{print $2}');
+sleep 2
+echo $RouterName
+#${BaseDir}/.bin/rdiff.sh ${RouterName} ${SSHuser} ${SSHhost} ${SSHport}
+# ${line[0]} ${line[1]} ${line[2]}
+
+done
+exit 0
+
+for SSHhost in ${routers[@]}; do
+
+RouterName=$(ssh ${SSH_OPTS} ${SSHuser}@${SSHhost} system identity print | awk '{print $2}');
+
+RouterDir="${BackupDir}/${RouterName}"
+HistoryDir="${RouterDir}history"
+echo $HistoryDir
+RouterTemp="${BackTemp}/${RouterName}"
+Log="${RouterTemp}log.txt"
+echo $Log
+echo ${RouterName}
+
+precedent_export_name=${RouterName}"-config-export-precedent.rsc"
+pen=${RouterName}'-config-export-precedent.rsc'
+echo ${pen}
+
+current_export_name="$RouterName-config-export-current.rsc"
+current_backup_name="$routername-config-backup-current.backup"
+diff_export_name="$routername-config-export-diff.rsc"
+
+current_export_name_history="$routername-$(date +%Y-%m-%d-%H-%M)-config-export-current.rsc"
+current_backup_name_history="$routername-$(date +%Y-%m-%d-%H-%M)-config-backup-current.backup"
+diff_export_name_history="$routername-$(date +%Y-%m-%d-%H-%M)-config-export-diff.rsc"
+exit 0
+
+echo "Create tmp directory..."
+mkdir -p $routertmp
+echo "tmp directory created $routername $routertmp ($time)." >> $routerlog
+echo
+echo "Create backup directory..."
+mkdir -p $routerpath
+echo "Backups directory created $routername $routerpath ($time)." >> $routerlog
+echo
+echo "Create history directory..."
+mkdir -p $routerhistory
+echo "Backups directory created $routername $routerhistory ($time)." >> $routerlog
+echo
+
+cd $routerpath
+echo "SSH connect to $routername..."
+echo "Create configuration $routername..."
+#ssh $SSH_OPTS $username"@"$i" /export file=export.rsc";
+sshpass -p $sshpassword ssh -o StrictHostKeyChecking=no $sshuser@$sshhost -p $sshport export >$current_export_name
+echo
+
+diff -I "RouterOS" $current_export_name $routerpath/$precedent_export_name > $diff_export_name
+
+if [ "$?" -ne "0" ]; then
+sshpass -p $sshpassword ssh -o StrictHostKeyChecking=no $sshuser@$sshhost -p $sshport export file=$current_export_name
+sshpass -p $sshpassword ssh -o StrictHostKeyChecking=no $sshuser@$sshhost -p $sshport system backup save name=$current_backup_name
+sshpass -p $sshpassword sftp -o StrictHostKeyChecking=no -oPort=$sshport $sshuser@$sshhost:$current_backup_name
+
+rm -f $precedent_export_name
+
+cp $current_export_name $backuppath"/history/"$current_export_name_history
+cp $current_backup_name $backuppath"/history/"$current_backup_name_history
+mv $diff_export_name $backuppath"/history/"$diff_export_name_history
+
+mv -f $current_export_name $precedent_export_name
+rm -f $diff_export_name
+#exit 1
+fi
+
+mv -f $current_export_name $precedent_export_name
+rm -f $diff_export_name
+
+#exit 0
+done
--- /dev/null
+#!/bin/bash
+date=$(date +%d-%m-%Y)
+time=$(date +%H-%M)
+username="mikro_bak"
+mikrotik=$HOME"/.mikrotiks"
+backup_path=$HOME"/backups"
+tmp=$HOME"/tmp"
+log=$tmp"/log.txt"
+SSH_KEY="$HOME/.ssh/id_rsa"
+SSH_OPTS="-i $SSH_KEY -o PasswordAuthentication=no -p 2222"
+#-------------------------------#
+smb_path_backup="//192.168.1.2/Backups"
+domain="WORKGROUP"
+usrname="backuper"
+passwd="root.mikrots.backuper"
+# Require router-specific SSH key
+if [ ! -f "$SSH_KEY" ]; then
+ echo "Error: SSH key not found at $SSH_KEY"
+ echo "Run ./setup-ssh-keys.sh to generate the key"
+ exit 1
+fi
+################
+# Backup listing
+################
+# Get addresses
+for i in $( cat $mikrotik ); do
+mkdir -p $tmp"/"$i
+# Get Devices Names
+#ssh $SSH_OPTS "$ROUTER_USER@$ROUTER_IP"
+RESULT=$(ssh $SSH_OPTS $username"@"$i" /system/identity print" | awk ' {print $2} ');
+#RESULT=$(ssh $username"@"$i" -p 2222 system identity print" | awk ' {print $2} ');
+echo "Start backup Devices"
+echo "Start backup Devices Mikrotiks ($time) $RESULT" > $log
+echo "Create Backup $i..."
+ssh $SSH_OPTS $username"@"$i" /system/backup save name=binary.backup";
+#ssh $username"@"$i" -p 2222 system backup save name=binary.backup";
+if [ $? -eq 0 ]; then
+echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]"
+echo "Create Backup $i success ($time)" >> $log
+echo
+else
+echo -n "$(tput hpa $(tput cols))$(tput cub 6)[ERROR]"
+echo "Createbackup $i failed ($time)" >> $log
+echo
+fi
+
+echo "Create configuration $i..."
+#ssh $SSH_OPTS $username"@"$i" /export file=export.rsc;"
+#ssh $username"@"$i" -p 2222 export file=export.rsc";
+ssh $SSH_OPTS $username"@"$i" export file=export.rsc; delay 3s;"
+if [ $? -eq 0 ]; then
+echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]"
+echo "Create configuration $i success ($time)" >> $log
+echo
+else
+echo -n "$(tput hpa $(tput cols))$(tput cub 6)[ERROR]"
+echo "Create configuration $i failed ($time)" >> $log
+echo
+fi
+echo "Create backups directory..."
+mkdir -p $tmp/$i/$date/
+echo "Backups directory created $i ($time)" >> $log
+echo
+echo "Download backup files $i..."
+sftp $SSH_OPTS "sftp://"$username"@"$i"/binary.backup" $tmp/$i/$date/$i"-"$time".backup";
+scp $SSH_OPTS "$username@$i:export.rsc" $tmp/$i/$date/$i"-"$time".rsc";
+#sftp "ssh://"$username"@"$i":2222/binary.backup" $tmp/$i/$date/$i"-"$time".backup";
+#sftp "ssh://"$username"@"$i":2222/export.rsc" $tmp/$i/$date/$i"-"$time".rsc";
+if [ $? -eq 0 ]; then
+echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]"
+echo "Download backups $i success ($time)" >> $log
+echo
+else
+echo -n "$(tput hpa $(tput cols))$(tput cub 6)[ERROR]"
+echo "Download backups $i failed ($time)" >> $log
+echo
+fi
+
+echo "Compress backups..."
+cd $tmp/$i/
+RESULT=$(tar -czvf $date".tar.gz" $date)
+echo "Backups compressed ($time)" >> $log
+
+#echo "Connect to network share $smb_path_backup..."
+#RESULT=$(cat /home/Mikrotiks/sudos | sudo -S -u root mount -t cifs $smb_path_backup /mnt/samba -o username=$usrname,password=$passwd,domain=$domain)
+#echo "Networkshare $smb_path_backup connected ($time)" >> $log
+
+echo "Create directory for backups device $i..."
+#RESULT=$(cat /home/Mikrotiks/sudos | sudo -S -u root mkdir -p /mnt/samba/Mikrotik/$i)
+RESULT=$(mkdir -p $backup_path"/"$i)
+echo "Directory for backup device $i created in network share ($time)" >> $log
+
+echo "Place backups in network share"
+#RESULT=$(cat /home/Mikrotiks/sudos | sudo -S -u root mv $tmp/$i/$date".tar.gz" "/mnt/samba/Mikrotik/$i/$date.tar.gz")
+RESULT=$(mv $tmp/$i/$date".tar.gz" $backup_path"/"$i"/"$date".tar.gz")
+echo "Backups $i moved to $backup_path"/"$i ($time)" >> $log
+echo "" >> $log
+
+#RESULT=$(cat /home/Mikrotiks/sudos | sudo -S -u root mv $log "/mnt/samba/MIkrotik/$i/$date.log.txt")
+RESULT=$(mv $log $backup_path"/"$i/$date".log.txt")
+
+echo "Remove local backup files device $i"
+ssh $SSH_OPTS "$username@$i /file remove binary.backup";
+ssh $SSH_OPTS "$username@$i /file remove export.rsc";
+#rm -r -f $tmp
+
+#cat /home/Mikrotiks/sudos | sudo -S -u root umount $smb_path_backup
+#cat /home/Mikrotiks/sudos | sudo -S -u root umount $smb_path_backup
+done
--- /dev/null
+#!/bin/bash
+
+while IFS=" " read -a line -r || [ -n "$line" ]; do
+
+
+
+date=$(date +%d-%m-%Y)
+time=$(date +%H-%M)
+
+sshuser="mikro_bak"
+sshpassword="Peskar55"
+
+homepath="/var/www/ros.vados.ru/Mikrotiks"
+
+mikrotik_file=$homepath"/.mikrotiks"
+backuppath=$homepath"/backups"
+tmp="."
+log=$tmp"/log.txt"
+
+SSH_KEY=$homepath"/.ssh/id_rsa"
+# Require router-specific SSH key
+if [ ! -f "$SSH_KEY" ]; then
+ echo "Error: SSH key not found at $SSH_KEY"
+ echo "Run ./setup-ssh-keys.sh to generate the key"
+ exit 1
+fi
+#export IFS=" "
+SSH_OPTS="-i "$SSH_KEY" -o PasswordAuthentication=no -p 2222"
+
+RESULT=$(ssh $SSH_OPTS $sshuser@10.30.30.10 system identity print | awk ' {print $2} ');
+echo
+echo $RESULT
+echo
+exit 0
+#RESULT=(ssh $SSH_OPTS $sshuser"@10.30.30.10" /system/identity print") >> ./ident.txt
+# | awk ' {print $2} ' >> ./ident.txt
+
+#readarray -t lines < "$mikrotik_file"
+cat $mikrotik_file | while read -r lines ; do
+for line in "${lines}" ; do
+echo
+#echo $line[$1]
+#echo $line[$2]
+echo $1
+echo
+done
+done
+exit 0
+
+#for i in $( cat $mikrotik_file ) ; do
+#cat $mikrotik_file | while read -r line ; do
+#-a HR ; do
+# [[ -z $0 ]] && continue # skip empty lines
+set -- $line
+echo
+echo "line = "$line
+echo
+# [[ -z ${line[0]} ]] && continue # skip empty lines
+echo $@
+echo
+routername=$1
+#${HR[0]}
+sshhost=$2
+#${HR[1]}
+sshport=$3
+#${HR[2]}
+
+SSH_OPTS="-i "$SSH_KEY" -o PasswordAuthentication=no -p "$sshport" "$sshuser"@"$sshhost
+
+current_export_name=$routername"-config-export-current.rsc"
+
+echo
+echo $routername
+echo
+echo $current_export_name
+echo
+
+
+#echo "Get current export file ($time) "$RESULT
+# >> $log
+#sshpass -p $sshpassword ssh -o StrictHostKeyChecking=no $sshuser@$sshhost -p $sshport export >$current_export_name
+ssh $SSH_OPTS " export file="$current_export_name"; delay 3s;" && continue
+if [ $? -eq 0 ]; then
+echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]"
+echo "Create configuration $routername success ($time)"
+# >> $log
+echo
+else
+echo -n "$(tput hpa $(tput cols))$(tput cub 6)[ERROR]"
+echo "Create configuration $i failed ($time)"
+# >> $log
+echo
+fi
+
+done
+#done
+#exit 0
+# cat $mikrotik_file | while read -a HR ; do
+# [[ -z ${HR[0]} ]] && continue # skip empty lines
+#while IFS=" " read -a line -r || [ -n "$line" ]; do
+#echo $line
+#echo ${line[0]}
+#echo ${line[1]}
+#echo ${line[2]}
+#echo ${line[3]}
+#RouterName=${line[0]}
+#SSHhost=${line[1]}
+#SSHport=${line[2]}
+
+#SSH_OPTS="-i $SSH_KEY -o PasswordAuthentication=no -p $SSHport"
+#current_export_name="$RouterName-config-export-current.rsc"
+#ssh $SSH_OPTS $SSHuser@$SSHhost export >$current_export_name
+# 2>&1
+# "; delay 3s;" && continue
+# sshpass -p $SSHpassword ssh -o StrictHostKeyChecking=no $SSHuser@$SSHhost -p $SSHport export >$current_export_name
+
+# Escape backslashes, dollar signs, and quotes
+# line=$(echo "$line" | sed 's/\\/\\\\/g' | sed 's/\$/\\$/g' | sed 's/"/\\"/g')
+# if [ -z "$SCRIPT_CONTENT" ]; then
+# SCRIPT_CONTENT="$line"
+# else
+# SCRIPT_CONTENT="$SCRIPT_CONTENT\\n$line"
+# fi
+#continue
+#done < "$HostsFile"
+exit 0
+
--- /dev/null
+exit
+ssh-keygen -t rsa -b 2048
+mc
+cd .bin
+ls -la
+cd ~
+ls -la
+cd .bin/ros-conf/
+ls -la
+./setup-ssh-keys.sh
+ssh mikro_bak@10.30.30.10
+ssh mikro_bak@10.30.30.10 2222
+ssh mikro_bak@10.30.30.10 -p 2222
+exit
+ssh mikro_bak@10.30.30.10 -p 2222
+cd ~./bin
+ls -la
+cd ~
+cd .bin/
+ls -la
+cd ros-conf/
+ls -la
+mc
+./setup-ssh-keys.sh
+ssh mikro_bak@10.30.30.10 -p 2222
+ls -la .
+./setup-ssh-keys.sh
+ssh://mikro_bak@10.30.30.10:2222
+ssh ssh://mikro_bak@10.30.30.10:2222/
+ls -la
+cd .bin/
+cd ros-conf/
+ls -la
+./setup-ssh-keys.sh
+mc
+exit
+./setup-ssh-keys.sh
+source ~/.bashrc
+mc
+./setup-ssh-keys.sh
+ls -la .
+cd .bin/
+ls -la .
+cd ros-conf/
+./setup-ssh-keys.sh
+exit
+./setup-ssh-keys.sh
+../
+cd ~
+cd .bin/
+cd ros-conf/
+./setup-ssh-keys.sh
+mc
+exit
+cd ~
+cd .bin/
+cd ros-conf/
+./setup-ssh-keys.sh
+ssh mikro_bak@10.30.30.10 -p 2222
+./setup-ssh-keys.sh
+cat mikro_bak_rsa@10.30.30.81.pub
+ssh mikro_bak@10.30.30.10 -p 2222
+ssh mikro_bak@10.30.30.81 -p 2222
+]
+"|
+'57777774799666999-9600609+
+q
+\
+;
+#
+
+ssh ssh://mikro_bak@10.30.30.81:2222
+./setup-ssh-keys.sh
+ssh ssh://mikro_bak@10.30.30.81:2222
+ssh mikro_bak@10.30.30.81
+ssh mikro_bak@10.30.30.81 -p 2222
+mc
+exit
+cat mikro_bak_rsa@10.30.30.81.pub >> known_hosts
+ssh mikro_bak@10.30.30.81 -p 2222
+ssh mikro_bak@10.30.30.81 -p 2222
+ssh -vvv mikro_bak@10.30.30.81 -p 2222
+mc
+exit
+ssh -vvv mikro_bak@10.30.30.81 -p 2222
+mc
+ssh -vvv mikro_bak@10.30.30.81 -p 2222
+
+\['
+p[ol-0]\p;l-]\
+p;ki
+exit
+mc
+ssh -vvv mikro_bak@10.30.30.81 -p 2222
+ssh mikro_bak@10.30.30.10 -p 2222
+mc
+exit
+chmod +x get_backups.sh
+./test.sh
+./get_backups.sh
+ssh mikro_bak@10.30.30.10 -p 2222
+ssh mikro_bak@10.30.30.81 -p 2222
+mc
+exit
+./test.sh
+exit
+bash --version
+readarray -t lines < "$mikrotik_file"
+readarray -t lines < "../.mikrotik"
+readarray -t lines < "../.mikrotiks"
+echo $lines
+readarray lines < "../.mikrotiks"
+echo $lines
+readarray lines < "../.mikrotiks"
+echo $lines
+readarray lines < "../.mikrotiks"
+echo $lines
+./test.sh
+./test.sh
+./ROSdiff.sh
+/ROSdiff.sh
+ROSdiff.sh
+./ROSdiff.sh
+exit
+bash -V
+bash --version
+./test.sh
+./test.sh
+/bin/bash
+./ROSdiff.sh
+exit
+./test.sh
+sshpass -h
+./test.sh
+bash -v
+exit
+./test.sh
+mc
+exit
+./ROSdiff.sh
+exit
+mc
+./ROSdiff.sh
+exit
+./ROSdiff.sh
+./ROSdiff.sh
+ls -la .
+mc
+./ROSdiff.sh
+mc
+exit
+./ROSdiff.sh
+exit
+./ROSdiff.sh
+exit
+./ROSdiff.sh
+sed -i 's/\r//' ./ROSdiff.sh
+./ROSdiff.sh
+./ROSdiff.sh
+touch rdiff.sh
+chmod +x rdiff.sh
+./ROSdiff.sh
+exit
+./ROSdiff.sh
+exit
+./ROSdiff.sh
+mc
+./ROSdiff.sh
+exit
+chmod +x ros-deploy.sh
+exit
+./ROSdiff.sh
+mc
+exit
+chmod +x ros-deploy.sh
+./ros-deploy.sh -h
+./ros-deploy.sh -H
+git clone https://github.com/tarikin/ros-deploy.git
+./ros-deploy.sh --help
+./ROSdiff.sh
+./ros-deploy.sh -h mikro_bak@10.30.30.81:2222 -s ./scripts/mktmpfs.rsc -i ../.ssh/id_rsa
+./ROSdiff.sh
+ssh-add
+ssh -i
+./ROSdiff.sh
+ssh -i ../.ssh/id_rsa
+mc
+exit
+./ROSdiff.sh
+scp
+./ROSdiff.sh
+wget https://github.com/tarikin/ros-deploy/archive/refs/tags/v1.2.1.tar.gz
+mc
+exit
+./ROSdiff.sh
+diff ./get_backups.sh ../.bak/get_backups.sh >> get_backups.diff
+touch config
+./ROSdiff.sh
+source ~/.bashrc
+mc
+./ROSdiff.sh
+mc
+./ROSdiff.sh
+mc
+./ROSdiff.sh
+mc
+./ROSdiff.sh
+mc
+./ROSdiff.sh
+mc
+./rdiff.sh
+mc
+./rdiff.sh
+mc
+ssh mikro_bak@10.30.30.86 -p 2222
+mc
+./ros-diff.sh
+./ros-diff.sh
+mc
+./ros-diff.sh
+crontab -e */20 * * * * /var/www/ros.vados.ru/Mikrotiks/.bin/ros-diff.sh
+crontab -u $whoami -e */20 * * * * /var/www/ros.vados.ru/Mikrotiks/.bin/ros-diff.sh
+crontab -l
+crontab -e
+crontab -l
+mc
+./run.sh
+vigr
+./run.sh
+passwd mikro_bak
+./run.sh
+git init
+git config --global amster-dev
+git config --global vados-dev
+git branch -m main
+git add MikroNUC/
+git add MikroMaster/
+git add MikroYellow/
+git commit MikroNUC/ -m "Initial Commit"
+git commit MikroMaster/ -m "Initial Commit"
+git commit MikroYellow/ -m "Initial Commit"
+git push ~/backups
+git push ~/backups main
+git config --global init.defaultBranch main
+git config core.repositoryformatversion 0
+git config core.filemode true
+git config core.bare true
+git config receive.denyCurrentBranch ignore
+git remote add origin git@amster-nuc:/.data/nfs/git/Mikrotiks/backup_configs.git
+git push origin main
+git remote add origin git@amster-nuc:/.data/nfs/git/Mikrotiks/backup_configs.git
+git push origin main
+ssh git@amster-nuc
+cat id_rsa.mikro_bak.pub
+ssh git@amster-nuc
+ssh-keygen -t rsa -b 2048
+cat id_rsa.mikro_bak.pub
+ssh git@amster-nuc
+ssh mikro_bak@amster-nuc
+ssh git@amster-nuc
+ssh -vvv git@amster-nuc
+ssh-keygen -t rsa -b 2048
+ssh-keygen -t rsa -b 2048 -C "git@amster-nuc"
+cat id_rsa.mikro_bak.amster-nuc.pub
+ssh -vvv git@amster-nuc
+cat id_rsa.pub
+ssh -vvv git@amster-nuc
+git push origin main
+git init
+git add .
+git commit -m 'Initial commit'
+git remote add origin git@amster-nuc:/.data/nfs/git/Mikrotiks/backup_configs.git
+git push origin main
+git clone git@amster-nuc:/.data/nfs/git/Mikrotiks/backup_configs.git
+ls -la .
+git commit -m 'Add .gitignore'
+git add .
+git commit -m 'Add .gitignore'
+git push origin main
+git clone git@amster-nuc:/.data/nfs/git/Mikrotiks/backup_configs.git
+git push origin main
+git clone git@amster-nuc:/.data/nfs/git/Mikrotiks/backup_configs.git
+git add .
+git commit -m 'Edit .gitignore'
+git push origin main
+git clone git@amster-nuc:/.data/nfs/git/Mikrotiks/backup_configs.git
+git config --global user.name mikro_bak
+git config --global user.email vados@vados.ru
+git init
+git add .
+git commit -m 'Initial commit'
+git init
+git add .
+git commit -m 'Initial commit'
+git remote add origin mikro_bak@amster-nuc:/.data/nfs/git/Mikrotiks/backups.git
+git push origin main
+git remote add origin git@amster-nuc:/.data/nfs/git/Mikrotiks/backups.git
+git remote remove origin mikro_bak@amster-nuc:/.data/nfs/git/Mikrotiks/backups.git
+git remote remove origin mikro_bak@amster-nuc
+git remote remove mikro_bak@amster-nuc
+git remote remove origin mikro_bak@amster-nuc
+git init
+git add .
+git commit -m 'Initial commit'
+git remote add origin git@amster-nuc:/.data/nfs/git/Mikrotiks/backups.git
+git push origin main
+git clone git@amster-nuc:/.data/nfs/git/Mikrotiks/backup_configs.git
+git clone git@amster-nuc:/.data/nfs/git/Mikrotiks/backups.git
+./ros-diff.sh
+cat authorized_keys
+cat id_rsa
+cat id_rsa.pub
+git init
+git add .
+git commit -m 'Initial commit'
+ssh git@vados-nuc
+git remote add origin git@vados-nuc:/backups.git
+git push origin main
+git init
+git add .
+git commit -am 'Initial commit'
+git remote add origin git@vados-nuc:d:/.bak/Mikrotiks/backups.git
+git push origin main
+git config --local remote.origin.receivepack "powershell git-receive-pack"
+git config --local remote.origin.uploadpack "powershell git-upload-pack"
+git push origin main
+$env:GIT_SSH_COMMAND = '"C:\WINDOWS\System32\OpenSSH\ssh.exe" -T'
+git config --local remote.origin.receivepack "powershell git-receive-pack"
+git config --local remote.origin.uploadpack "powershell git-upload-pack"
+git fetch origin
+git remote add origin git@vados-nuc:/d/.bak/Mikrotiks/backups.git
+git init
+git add .
+git commit -am 'Initial commit'
+git remote add origin git@vados-nuc:/d/.bak/Mikrotiks/backups.git
+git fetch origin
+git config --local remote.origin.uploadpack "powershell git-upload-pack"
+git config --local remote.origin.receivepack "powershell git-receive-pack"
+git fetch origin
+git push origin
+git push --set-upstream origin main
+git push --set-upstream origin main -vvv
+ping vados-nuc
+git push --set-upstream origin main -vvv
+git push --set-upstream origin main
+source ~/.bashrc
+git push --set-upstream origin main
+source ~/.bashrc
+git push --set-upstream origin main
+source ~/.bashrc
+git push --set-upstream origin main
+ssh git@vados-nuc
+ssh-add
+git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe" eval $(ssh-agent)
+git push --set-upstream origin main
+ls -al ~/.ssh
+source ~/.bashrc
+git push --set-upstream origin main
+source ~/.bashrc
+git push --set-upstream origin main
+source ~/.bashrc
+git push --set-upstream origin main
+git fetch origin
+GIT_SSH_COMMAND="ssh -v" git fetch
+git fetch origin
+git init
+git add .
+git commit -am 'Initial commit'
+git fetch origin
+git push --set-upstream origin main
+git remote add origin git@vados-nuc:/d/.bak/Mikrotiks/ba
+git push --set-upstream origin main
+git fetch origin
+git push --set-upstream origin main
+git fetch origin
+git push --set-upstream origin main
+git fetch origin
+git push --set-upstream origin main
+git fetch origin
+git fetch origin -v
+git -vvv fetch origin
+git -v fetch origin
+GIT_SSH_COMMAND="ssh -v" git fetch
+git fetch origin
+GIT_SSH_COMMAND="ssh -v" git fetch
+git fetch origin
+GIT_SSH_COMMAND="ssh -v" git fetch
+git fetch origin
+GIT_SSH_COMMAND="ssh -v" git fetch
+git config --list
+git config --global protocol.version 2
+git config --list
+git fetch origin
+GIT_SSH_COMMAND="ssh -v" git fetch
+git config --local remote.origin.receivepack "powershell git-receive-pack"
+git config --local remote.origin.uploadpack "powershell git-upload-pack"
+git fetch origin
+GIT_SSH_COMMAND="ssh -v" git fetch
+git fetch origin
+GIT_SSH_COMMAND="ssh -v" git fetch
+git fetch origin
+GIT_SSH_COMMAND="ssh -v" git fetch
+git fetch origin
+git push --set-upstream origin main
+git fetch origin
+./ros-diff.sh
+git add .
+git init
+git add .
+git commit 'Reinit commit'
+git commit -m 'Reinit commit'
+git fetch origin
+git push --set-upstream origin main
+git add .
+./ros-diff.sh
+git fetch origin
+git config --local remote.origin.uploadpack "powershell git-upload-pack"
+git config --local remote.origin.receivepack "powershell git-receive-pack"
+git fetch origin
+GIT_SSH_COMMAND="ssh -v" git fetch
+git fetch origin
+GIT_SSH_COMMAND="ssh -v" git fetch
+./ros-diff.sh
+set -o
+set -o piperfail
+set -o pipefail
+set -o
+set +o pipefail
+set -o
+set +o pipefail
+set -o
+set +e
+set -o
+set -e
+set -o
+./ros-diff.sh
+rm -d tmp/
+./ros-diff.sh
+cat ros-deploy.sh
+./ros-diff.sh
+\date '+%d.%m.%Y'date '+%d.%m.%Y'date '+%d.%m.%Y'date '+%d.%m.%Y'date '+%d.%m.%Y'date '+%d.%m.%Y'
+\date '+%d.%m.%Y'date '+%d.%m.%Y'date '+%d.%m.%Y'date '+%d.%m.%Y'date '+%d.%m.%Y'date '+%d.%m.%Y'date '+%d.%m.%Y'
+(date '+%d.%m.%Y')
+(date '%H:%M:%S %z')
+(date '+%H:%M:%S %z')
+./ros-diff.sh
+kdialog --password "Пожалуйста, введите свой пароль:"kdialog --password "Пожалуйста, введите свой пароль:"kdialog --password "Пожалуйста, введите свой пароль:"
+clear
+reset
+dialog --title " Уведомление " --msgbox "\n Свершилось что-то страшное!" 6 50
+echo -n "Продолжить? (y/n) "
+read item
+case "$item" in y|Y) echo "Ввели «y», продолжаем..."; ;; n|N) echo "Ввели «n», завершаем..."; exit 0; ;; *) echo "Ничего не ввели. Выполняем действие по умолчанию..."; ;; esac
+$(tput setf 4)
+echo tt
+echo -n "$(tput setf 4) ee"
+echo -n "$(tput setf 2) ee"
+./test.sh
+./ros-diff.sh
+'\033[0m'
+\033[0m
+reset
+./ros-diff.sh
+gg
+./ros-diff.sh
+git clone https://github.com/lnfnunes/bash-progress-indicator.git
+./ros-diff.sh
+main.sh spinner 1
+./main.sh spinner 1
+./main.sh spinner1
+cd ..
+./ros-diff.sh
+clear
+./ros-diff.sh
+ssh -i /var/www/ros.vados.ru/Mikrotiks/.ssh/id_rsa -o PasswordAuthentication=no -p 2222 mikro_bak@10.30.30.10 export >Config.rsc
+ssh -i /var/www/ros.vados.ru/Mikrotiks/.ssh/id_rsa -o PasswordAuthentication=no -p 2222 mikro_bak@10.30.30.10 export >Config.rsc 2>1
+ssh -i /var/www/ros.vados.ru/Mikrotiks/.ssh/id_rsa -o PasswordAuthentication=no -p 2222 mikro_bak@10.30.30.10 export >Config.rsc >&1
+ssh -i /var/www/ros.vados.ru/Mikrotiks/.ssh/id_rsa -o PasswordAuthentication=no -p 2222 mikro_bak@10.30.30.10 export >Config.rsc >&2
+ssh -i /var/www/ros.vados.ru/Mikrotiks/.ssh/id_rsa -o PasswordAuthentication=no -p 2222 mikro_bak@10.30.30.10 export
+./ros-diff.sh
+clear
+./ros-diff.sh
+diff --help
+./ros-diff.sh
+ros-diff.sh
+./ros-diff.sh
+1
+./ros-diff.sh
+/usr/bin/ssh -2 -4 -p 2222 -l mikro_bak 10.30.30.10 -i /var/www/ros.vados.ru/Mikrotiks/.ssh/id_rsa -o PasswordAuthentication=no export > "/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/tmp/Config.rsc"
+`
+
+q
+./ros-diff.sh
+cd ..
+cd backups/
+git fetch
+git add .
+git push
+./ros-diff.sh
+git init
+git add .
+git config --global --add safe.directory /var/www/ros.vados.ru
+git add .
+git commit -m 'Initial commit'
+git push
+git push origin
+git fetch origin
+git config --global --add safe.directory /var/www/ros.vados.ru
+git init
+git config --global --add safe.directory /var/www/ros.vados.ru
+git add .
+git commit -m 'Initial commit'
+git init
+git commit -m 'Initial commit'
+git add .
+git commit -m 'Initial commit'
+git init
+cat config
+git add .
+git commit -m 'Initial commit'
+git fetch origin
+git push origin
+git pull
+git push
+git init
+git add .
+git commit -m 'Initial commit 1'
+git fetch
+git push
+git init
+git add .
+git commit -m 'Initial commit'
+git push
+./ros-diff.sh
+./test.sh
+./ros-diff.sh
+touch ~/.gnupg/gpg-agent.conf
+gpg --import vados-dev_public.gpg
+gpg --delete vados-dev
+gpg --import vados-dev.pub
+gpg -k
+git config --global user.signingkey ABE4CF61A85CDD6E15F2C02DFCC5E4C7407B8BF7
+git config --global commit.gpgsign true
+cd ~
+mc
+exit
+gpg -k
+clear
+gpg -k
+gpg --delete ABE4CF61A85CDD6E15F2C02DFCC5E4C7407B8BF7
+cd Mikrotiks/
+gpg --import gpg_vados-dev.pub
+gpg --import gpg_vados-dev.asc
+ls -la
+gpg --import gpg_vados-dev.asc
+gpg -k
+gpg --delete 0x1FD2694762FCE438
+gpg --import gpg_vados-dev.asc
+cd ~
+gpg --import gpg_vados-dev.asc
+gpg --import gpg_vados-dev.asc
+gpg -k
+exit
+mc
+cd ~
+source ~/.bashrc
+mc
+cd ~/.ssh/
+cat authorized_keys
+cd ../
+gpg -k
+gpg --delete 0x1FD2694762FCE438
+exit
+git fetch
+git push
+git push main
+git push --set-upstream main main
+git commit -m 'Mikro_bak Initial Commit.'
+git config --global --add safe.directory /var/www/ros.vados.ru
+git commit -m 'Mikro_bak Initial Commit.'
+mc
+exit
+./ros-diff.sh
+cd ~
+mc
+git config --global --add safe.directory /.data/nfs/repos/Mikrotiks/ros.vados.ru.git
+git add .
+git commit -m 'Fuck You!'
+git push
+cd ~
+cd .bin/
+./ros-diff.sh
--- /dev/null
+# ~/.bashrc: executed by bash(1) for non-login shells.
+# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
+# for examples
+
+# If not running interactively, don't do anything
+case $- in
+ *i*) ;;
+ *) return;;
+esac
+
+# don't put duplicate lines or lines starting with space in the history.
+# See bash(1) for more options
+HISTCONTROL=ignoreboth
+
+# append to the history file, don't overwrite it
+shopt -s histappend
+
+# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
+HISTSIZE=1000
+HISTFILESIZE=2000
+
+# check the window size after each command and, if necessary,
+# update the values of LINES and COLUMNS.
+shopt -s checkwinsize
+
+# If set, the pattern "**" used in a pathname expansion context will
+# match all files and zero or more directories and subdirectories.
+#shopt -s globstar
+
+# make less more friendly for non-text input files, see lesspipe(1)
+[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
+
+# set variable identifying the chroot you work in (used in the prompt below)
+if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
+ debian_chroot=$(cat /etc/debian_chroot)
+fi
+
+# set a fancy prompt (non-color, unless we know we "want" color)
+case "$TERM" in
+ xterm-color|*-256color) color_prompt=yes;;
+esac
+
+# uncomment for a colored prompt, if the terminal has the capability; turned
+# off by default to not distract the user: the focus in a terminal window
+# should be on the output of commands, not on the prompt
+#force_color_prompt=yes
+
+if [ -n "$force_color_prompt" ]; then
+ if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
+ # We have color support; assume it's compliant with Ecma-48
+ # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
+ # a case would tend to support setf rather than setaf.)
+ color_prompt=yes
+ else
+ color_prompt=
+ fi
+fi
+
+if [ "$color_prompt" = yes ]; then
+ PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
+else
+ PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
+fi
+unset color_prompt force_color_prompt
+
+# If this is an xterm set the title to user@host:dir
+case "$TERM" in
+xterm*|rxvt*)
+ PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
+ ;;
+*)
+ ;;
+esac
+
+# enable color support of ls and also add handy aliases
+if [ -x /usr/bin/dircolors ]; then
+ test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
+ alias ls='ls --color=auto'
+ #alias dir='dir --color=auto'
+ #alias vdir='vdir --color=auto'
+
+ alias grep='grep --color=auto'
+ alias fgrep='fgrep --color=auto'
+ alias egrep='egrep --color=auto'
+fi
+
+# colored GCC warnings and errors
+#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
+
+# some more ls aliases
+alias ll='ls -alF'
+alias la='ls -A'
+alias l='ls -CF'
+
+# Add an "alert" alias for long running commands. Use like so:
+# sleep 10; alert
+alias alert='n8otify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
+
+# Alias definitions.
+# You may want to put all your additions into a separate file like
+# ~/.bash_aliases, instead of adding them here directly.
+# See /usr/share/doc/bash-doc/examples in the bash-doc package.
+
+if [ -f ~/.bash_aliases ]; then
+ . ~/.bash_aliases
+fi
+
+# enable programmable completion features (you don't need to enable
+# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
+# sources /etc/bash.bashrc).
+if ! shopt -oq posix; then
+ if [ -f /usr/share/bash-completion/bash_completion ]; then
+ . /usr/share/bash-completion/bash_completion
+ elif [ -f /etc/bash_completion ]; then
+ . /etc/bash_completion
+ fi
+fi
+
+# Terminal Prompt full paths
+export PROMPT_DIRTRIM=5
+export force_color_prompt=yes
+#export GIT_SSH=$(which ssh)
+#'"c:\WINDOWS\System32\OpenSSH\ssh.exe" -T'
+#eval $(ssh-agent)
+#ssh-add
+GPG_TTY=`tty`
+export GPG_TTY
--- /dev/null
+MIT License
+
+Copyright (c) 2018 Leandro Nunes
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
--- /dev/null
+# bash-progress-indicator
+Pure Bash script progress indicators
+
+## Usage
+```
+chmod +x main.sh
+./main.sh {progress_indicator_type}
+```
+
+## progress_indicator_type
+#### progress
+
+
+#### progress_advanced
+
+
+#### spinner1
+
+#### spinner2
+
+#### spinner3
+
+
+## I wrote an article about this technique [pt-br]
+[Medium - [Bash] Construindo indicador de progresso](https://medium.com/meninunes/bash-construindo-indicador-de-progresso-8de94c37683)
+
+## License
+[MIT License](LICENSE) © [Leandro Nunes](https://lnfnunes.com.br)
--- /dev/null
+#!/bin/bash -e
+# shellcheck disable=SC1091
+
+declare -rx STEPS=(
+ 'pre-install'
+ 'install'
+ 'post-install'
+)
+declare -rx CMDS=(
+ 'sleep 10'
+ 'sleep 10'
+ 'sleep 10'
+)
+
+case $1 in
+ progress)
+ . 'progress.sh'
+ ;;
+ progress_advanced)
+ . 'progress_advanced.sh'
+ ;;
+ spinner*)
+ . 'spinner.sh'
+ ;;
+ *)
+ echo "Invalid option $1!"
+ exit 1
+esac
+
+start
--- /dev/null
+#!/bin/bash -e
+
+declare -rx BAR_SIZE="##########"
+declare -rx CLEAR_LINE="\\033[K"
+
+start() {
+ local MAX_STEPS=${#STEPS[@]}
+ local MAX_BAR_SIZE="${#BAR_SIZE}"
+
+ tput civis -- invisible
+
+ echo -ne "\\r[${BAR_SIZE:0:0}] 0 %$CLEAR_LINE"
+ for step in "${!STEPS[@]}"; do
+ ${CMDS[$step]}
+
+ perc=$(((step + 1) * 100 / MAX_STEPS))
+ percBar=$((perc * MAX_BAR_SIZE / 100))
+ echo -ne "\\r[${BAR_SIZE:0:percBar}] $perc %$CLEAR_LINE"
+ done
+ echo ""
+
+ tput cnorm -- normal
+}
--- /dev/null
+#!/bin/bash -e
+
+start() {
+ local MAX_STEPS=${#STEPS[@]}
+ local BAR_SIZE="##########"
+ local MAX_BAR_SIZE="${#BAR_SIZE}"
+ local CLEAR_LINE="\\033[K"
+
+ tput civis -- invisible
+
+ for step in "${!STEPS[@]}"; do
+ perc=$((step * 100 / MAX_STEPS))
+ percBar=$((perc * MAX_BAR_SIZE / 100))
+ echo -ne "\\r- ${STEPS[step]} [ ]$CLEAR_LINE\\n"
+ echo -ne "\\r[${BAR_SIZE:0:percBar}] $perc %$CLEAR_LINE"
+
+ ${CMDS[$step]}
+
+ perc=$(((step + 1) * 100 / MAX_STEPS))
+ percBar=$((perc * MAX_BAR_SIZE / 100))
+ echo -ne "\\r\\033[1A- ${STEPS[step]} [✔]$CLEAR_LINE\\n"
+ echo -ne "\\r[${BAR_SIZE:0:percBar}] $perc %$CLEAR_LINE"
+ done
+ echo ""
+
+ tput cnorm -- normal
+}
--- /dev/null
+#!/bin/bash -e
+
+declare -x FRAME
+declare -x FRAME_INTERVAL
+
+set_spinner() {
+ case $1 in
+ spinner1)
+ FRAME=("⠋" "⠙" "⠹" "⠸" "⠼" "⠴" "⠦" "⠧" "⠇" "⠏")
+ FRAME_INTERVAL=0.1
+ ;;
+ spinner2)
+ FRAME=("-" "\\" "|" "/")
+ FRAME_INTERVAL=0.25
+ ;;
+ spinner3)
+ FRAME=("◐" "◓" "◑" "◒")
+ FRAME_INTERVAL=0.5
+ ;;
+ spinner4)
+ FRAME=(":(" ":|" ":)" ":D")
+ FRAME_INTERVAL=0.5
+ ;;
+ spinner5)
+ FRAME=("◇" "◈" "◆")
+ FRAME_INTERVAL=0.5
+ ;;
+ spinner6)
+ FRAME=("⚬" "⚭" "⚮" "⚯")
+ FRAME_INTERVAL=0.25
+ ;;
+ spinner7)
+ FRAME=("░" "▒" "▓" "█" "▓" "▒")
+ FRAME_INTERVAL=0.25
+ ;;
+ spinner8)
+ FRAME=("☉" "◎" "◉" "●" "◉")
+ FRAME_INTERVAL=0.1
+ ;;
+ spinner9)
+ FRAME=("❤" "♥" "♡")
+ FRAME_INTERVAL=0.15
+ ;;
+ spinner10)
+ FRAME=("✧" "☆" "★" "✪" "◌" "✲")
+ FRAME_INTERVAL=0.1
+ ;;
+ spinner11)
+ FRAME=("●" "◕" "☯" "◔" "◕")
+ FRAME_INTERVAL=0.25
+ ;;
+ *)
+ echo "No spinner is defined for $1"
+ exit 1
+ esac
+}
+
+start() {
+ local step=0
+
+# tput civis -- invisible
+
+ while [ "$step" -lt "${#CMDS[@]}" ]; do
+ ${CMDS[$step]} & pid=$!
+
+ while ps -p $pid &>/dev/null; do
+ echo -ne "\\r[ ] ${STEPS[$step]} ..."
+
+ for k in "${!FRAME[@]}"; do
+ echo -ne "\\r[ ${FRAME[k]} ]"
+ sleep $FRAME_INTERVAL
+ done
+ done
+
+ echo -ne "\\r[ ✔ ] ${STEPS[$step]}\\n"
+ step=$((step + 1))
+ done
+
+# tput cnorm -- normal
+}
+
+set_spinner "$1"
--- /dev/null
+/var/log/Mikrotiks
\ No newline at end of file
--- /dev/null
+[10.30.30.10]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHv+zKADwFHB8DebzFchw4/RkJQRAjDWS7k1DdzCYzLfLsWqXdSc24HDBSLtdlEl9pPY7VevZm+VH1vHU06Ws1MWMC1oNr3UotAeb3qckUGLEvNqsDO5JOVVbHZVkbnwqnSfBIgAPGUNTHOImqV48D/Hi7Oey10e/KvoEKIS+RSaAZ4OkI3IiSG/9fnwVPYrvdjNAkgFUumNFvN8q512MV5W1RZ5ajsZwuBucxf5Bhny/c5pNHCKHrnQdCnn7RKyhZHPRJaPNmFhO3/A5j/LBDt04FGF9LG+gCBCNkUnQpAUiDzxgyvY+wJetXahUCyJ9hLoGTGM4AyxsHfrhJkMs9
--- /dev/null
+-----BEGIN OPENSSH PRIVATE KEY-----
+b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
+NhAAAAAwEAAQAAAQEAu+2q6J8oIGRByMJOm3GTN9mixrKqrm/eW1Izv69Lt2oUTeCjfmsq
+Pk8CEiRjkyCaL/agXuIoDghGFFQGexanyVXJNYlSFgGa1WuCnzJBElpDQo5sHyKB2tvcFc
+jQv1SLJ3ci11GDIIhLAqlQ4veNN+CFkjXWgLocTTccPnC6+rgnMLkJK/owejWEjLFl/ti5
+0dqTPny+OT9Tq9ei9cY1fqJU4r56Gq5G5GYj9CzKfJZX5F5wkZ06nCCJGRWTXgrctoEFB4
+r+vn2rl1PyaqCz2AXWmWyjHcGZ2gp8Xw5beezJ8e5N4HBOZk/nsF8b1nMNpA20iN9d3ugI
+1X5SgjYdgQAAA8icBUzNnAVMzQAAAAdzc2gtcnNhAAABAQC77aronyggZEHIwk6bcZM32a
+LGsqqub95bUjO/r0u3ahRN4KN+ayo+TwISJGOTIJov9qBe4igOCEYUVAZ7FqfJVck1iVIW
+AZrVa4KfMkESWkNCjmwfIoHa29wVyNC/VIsndyLXUYMgiEsCqVDi94034IWSNdaAuhxNNx
+w+cLr6uCcwuQkr+jB6NYSMsWX+2LnR2pM+fL45P1Or16L1xjV+olTivnoarkbkZiP0LMp8
+llfkXnCRnTqcIIkZFZNeCty2gQUHiv6+fauXU/JqoLPYBdaZbKMdwZnaCnxfDlt57Mnx7k
+3gcE5mT+ewXxvWcw2kDbSI313e6AjVflKCNh2BAAAAAwEAAQAAAQAK2Ujj2PGbZ8OXGrB9
+r2wiQ0FvBbgYuIM2SQ6NDZ+Usl5YXel8+M7IKLjOjKSQRRzhkUk8xlgtnIipz8KirxzMi1
+PsRUXPLhSJfDAJj1XLq25KlKeP5zwRLbQM2zpBxq2p1Oor/Uammsz0awstBGwgl6jeV0FP
+eRmn03tL7NIT0HL3BSRP75ReWfdwF8L5Ja2JP1Mw1nBpbpEA4fAsGaHsX3WPaAVMx1ThUU
+vV1Qf+7aoDaX0hjdwNErFOwYUD37E7CvMMuwztGTR0SgC5UPkgW+OHiUtTWhQl0hHKy96t
+9J8l4nwmpNTcqdryKjffThroYKjv0YA71K1gHI6fQRxJAAAAgQC1tE1LnBIYtGdhkVHv1e
+9rOjdHm4XRgzmWDGYGFWndQfDZ+Tezj3lrookPf4Yp5GM5lB7OE+TsUbRPQkYlCTAURMGI
+rYagsCinmICMZj3IeaHmVbUmvNrd2NM+CvceMAsJBcNIbuWKyFv77wrsrHiUF+8hd4BWDk
+vVnATBUFTPHgAAAIEA71BXm3WQFevdMJaDT0tcTGG2Czf9RoR6gOLOiV+63Hd2a4jcQ1CG
+YitRWpvU0pE1151EwWiEeaT3gpA7wstMB26F9z6Co+wBcjpm0Aw+J/N+g8cJgED90ZQEQk
+5W0BTbn2VmL2av19BuLRW0IDE68BMnFuFLZO0kQvvIdl/EJHcAAACBAMkIHYmyuQafPRiA
+odBywQnz5XAPlxDdHw8uEEqSuCnAkiK3vbedf8qD4mkjmKsCZ/iDfcq+EtNxUDNSNiuxDo
+NbRo/cBGiGjlfv0a8RcpNhjOEu5cMMwdTSKrO2vsCi9dhS828C0fRL5dC07vYhDEyVTke7
+iD2DDEYAA3HeKqPHAAAAEG1pa3JvX2Jha0BhbXN0ZXIBAg==
+-----END OPENSSH PRIVATE KEY-----
--- /dev/null
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC77aronyggZEHIwk6bcZM32aLGsqqub95bUjO/r0u3ahRN4KN+ayo+TwISJGOTIJov9qBe4igOCEYUVAZ7FqfJVck1iVIWAZrVa4KfMkESWkNCjmwfIoHa29wVyNC/VIsndyLXUYMgiEsCqVDi94034IWSNdaAuhxNNxw+cLr6uCcwuQkr+jB6NYSMsWX+2LnR2pM+fL45P1Or16L1xjV+olTivnoarkbkZiP0LMp8llfkXnCRnTqcIIkZFZNeCty2gQUHiv6+fauXU/JqoLPYBdaZbKMdwZnaCnxfDlt57Mnx7k3gcE5mT+ewXxvWcw2kDbSI313e6AjVflKCNh2B rsa-key-20260204
\ No newline at end of file
--- /dev/null
+# RouterOS Configuration Scripts
+
+Personal RouterOS configuration scripts for home network management.
+
+## Overview
+
+This repository contains RouterOS scripts to configure and diagnose a MikroTik router. Configuration scripts set up router modes (routing, bridging, NAT, DHCP). Check scripts display router settings and diagnostics.
+
+## Quick Start
+
+### Running Scripts
+
+Run scripts on the router using forward slashes:
+
+```routeros
+/system script run config/firewall
+/system script run check/nat
+```
+
+## Network Configuration
+
+The `combo1` port is renamed to `combo1-WAN` for routing mode or `combo1-bridge` for switching mode. The `bridge` interface is used for the internal network.
+
+The WAN interface uses `192.168.200.2/24` with gateway `192.168.200.1`. The bridge interface uses `192.168.88.1/24` as the gateway for the internal network. DHCP serves addresses from `192.168.88.100-192.168.88.199`.
+
+## Hardware
+
+These scripts are tested on CRS106, a MikroTik switch/router.
+
+## Repository Structure
+
+```text
+routeros-config/
+├── scripts/
+│ ├── config/ # Configuration scripts
+│ ├── check/ # Diagnostic scripts
+│ └── README.md # Format and syntax guidelines
+└── README.md # This file
+```
+
+For format and syntax guidelines, see [scripts/README.md](scripts/README.md).
--- /dev/null
+#!/bin/bash
+# Setup SSH keys for RouterOS router
+
+ROUTER_IP="10.30.30.81"
+ROUTER_USER="mikro_bak"
+KEY_NAME=$ROUTER_USER"_rsa@"$ROUTER_IP
+KEY_PATH="$HOME/.ssh/$KEY_NAME"
+
+# Check/create .ssh directory
+if [ ! -d "$HOME/.ssh" ]; then
+ mkdir -p "$HOME/.ssh"
+ chmod 700 "$HOME/.ssh"
+fi
+
+# Generate SSH key if it doesn't exist
+if [ ! -f "$KEY_PATH" ]; then
+ ssh-keygen -t rsa -b 2048 -f "$KEY_PATH" -N "" -C "$ROUTER_USER@$ROUTER_IP"
+fi
+
+# Upload and import key on router
+scp "$KEY_PATH.pub" "$ROUTER_USER@$ROUTER_IP -p 2222":/
+ssh "$ROUTER_USER@$ROUTER_IP -p 2222" "/user ssh-keys import public-key-file=$KEY_NAME.pub user=$ROUTER_USER"
+
+# Verify key works
+if ! ssh -i "$KEY_PATH" -o PasswordAuthentication=no "$ROUTER_USER@$ROUTER_IP -p 2222" "/system identity print" >/dev/null 2>&1; then
+ echo "Error: SSH key authentication failed"
+ exit 1
+fi
--- /dev/null
+#!/bin/bash
+# Upload all scripts and sync to RouterOS
+
+ROUTER_IP="10.30.30.10"
+ROUTER_USER="mikro_bak"
+SSH_KEY="$HOME/.ssh/mikro_bak_rsa"
+RSC_FILE="import_scripts.rsc"
+
+# Require router-specific SSH key
+if [ ! -f "$SSH_KEY" ]; then
+ echo "Error: SSH key not found at $SSH_KEY"
+ echo "Run ./setup-ssh-keys.sh to generate the key"
+ exit 1
+fi
+
+SSH_OPTS="-i $SSH_KEY -o PasswordAuthentication=no"
+
+# Generate .rsc import file
+echo "Generating import file..."
+
+# Get git commit hash and dirty status
+GIT_HASH=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
+if [ -z "$(git status --porcelain 2>/dev/null)" ]; then
+ GIT_STATUS="$GIT_HASH"
+else
+ GIT_STATUS="$GIT_HASH-dirty"
+fi
+
+# Get current date with timezone offset
+GEN_DATE=$(date '+%Y-%m-%d %H:%M:%S %z')
+
+# Write header
+cat > "$RSC_FILE" << RSC_HEADER
+# RouterOS script import file
+# Generated by sync-script.sh
+# Date: $GEN_DATE
+# Git: $GIT_STATUS
+
+RSC_HEADER
+
+# Write header for creating scripts section
+printf ':put "=== Creating scripts ==="\n' >> "$RSC_FILE"
+printf '\n' >> "$RSC_FILE"
+
+# Create function for script creation
+printf ':global createScriptIfMissing do={\n' >> "$RSC_FILE"
+printf ' :if ([/system script print count-only where name=$scriptName] = 0) do={\n' >> "$RSC_FILE"
+printf ' :put ("Creating script: " . $scriptName);\n' >> "$RSC_FILE"
+printf ' /system script add name=$scriptName\n' >> "$RSC_FILE"
+printf ' }\n' >> "$RSC_FILE"
+printf '}\n\n' >> "$RSC_FILE"
+
+# Write all add commands first
+for SCRIPT_FILE in scripts/config/*.rsc scripts/check/*.rsc; do
+ if [ ! -f "$SCRIPT_FILE" ]; then
+ continue
+ fi
+
+ SCRIPT_NAME=$(sed -n '1p' "$SCRIPT_FILE" | sed 's/^# //')
+ POLICY=$(sed -n '3p' "$SCRIPT_FILE" | sed -n 's/^# policy=\(.*\)/\1/p')
+
+ if [ -z "$POLICY" ]; then
+ echo "Error: Missing policy in $SCRIPT_FILE (line 3 should be '# policy=read,write')"
+ exit 1
+ fi
+
+ # Call function with script name
+ printf '$createScriptIfMissing scriptName="%s"\n' "$SCRIPT_NAME" >> "$RSC_FILE"
+done
+
+# Empty line between sections
+printf '\n' >> "$RSC_FILE"
+printf ':put ""\n' >> "$RSC_FILE"
+printf ':put "=== Updating scripts ==="\n' >> "$RSC_FILE"
+printf '\n' >> "$RSC_FILE"
+
+# Write all set commands
+for SCRIPT_FILE in scripts/config/*.rsc scripts/check/*.rsc; do
+ if [ ! -f "$SCRIPT_FILE" ]; then
+ continue
+ fi
+
+ SCRIPT_NAME=$(sed -n '1p' "$SCRIPT_FILE" | sed 's/^# //')
+ COMMENT=$(sed -n '2p' "$SCRIPT_FILE" | sed 's/^# //')
+ POLICY=$(sed -n '3p' "$SCRIPT_FILE" | sed -n 's/^# policy=\(.*\)/\1/p')
+
+ # Escape comment for RouterOS (escape quotes)
+ ESCAPED_COMMENT=$(echo "$COMMENT" | sed 's/"/\\"/g')
+
+ # Read script content and escape for RouterOS .rsc format
+ # Loop through file line by line, escape special chars, join with \n
+ SCRIPT_CONTENT=""
+ while IFS= read -r line || [ -n "$line" ]; do
+ # Escape backslashes, dollar signs, and quotes
+ line=$(echo "$line" | sed 's/\\/\\\\/g' | sed 's/\$/\\$/g' | sed 's/"/\\"/g')
+ if [ -z "$SCRIPT_CONTENT" ]; then
+ SCRIPT_CONTENT="$line"
+ else
+ SCRIPT_CONTENT="$SCRIPT_CONTENT\\n$line"
+ fi
+ done < "$SCRIPT_FILE"
+
+ # Write set command directly to file
+ printf ':put "Updating script: %s"; /system script set "%s" source="' "$SCRIPT_NAME" "$SCRIPT_NAME" >> "$RSC_FILE"
+ echo "$SCRIPT_CONTENT" | sed 's/\\n/\\n\\\n /g' >> "$RSC_FILE"
+ printf '" comment="%s" policy=%s\n\n' "$ESCAPED_COMMENT" "$POLICY" >> "$RSC_FILE"
+done
+
+# Delete the helper function
+printf '\n:set createScriptIfMissing;\n' >> "$RSC_FILE"
+
+# Print all scripts (excluding source/contents)
+printf ':put ""\n:put "=== All system scripts ==="\n/system script print proplist=name,comment,owner,policy,dont-require-permissions,run-count,last-started,invalid\n' >> "$RSC_FILE"
+
+# Show generated .rsc file and ask for confirmation
+echo ""
+echo "=== Generated import file ($RSC_FILE) ==="
+head -20 "$RSC_FILE"
+echo "..."
+echo ""
+read -p "Upload and import this file? (y/N): " -n 1 -r
+echo
+if [[ ! $REPLY =~ ^[Yy]$ ]]; then
+ echo "Aborted"
+ rm -f "$RSC_FILE"
+ exit 1
+fi
+
+# Upload .rsc file
+echo "Uploading import file..."
+scp $SSH_OPTS "$RSC_FILE" "$ROUTER_USER@$ROUTER_IP":/
+
+# Import on router
+echo "Importing scripts..."
+ssh $SSH_OPTS "$ROUTER_USER@$ROUTER_IP" "/import file-name=$RSC_FILE"
+
+# Cleanup
+rm -f "$RSC_FILE"
+echo "Done!"
--- /dev/null
+#!/bin/bash
+#set +e -u
+#o pipefail
+# Add to cron
+# crontab -e
+#*/20 * * * * /var/www/ros.vados.ru/Mikrotiks/.bin/ros-diff.sh
+#set +eo pipefail
+#set -x
+#GEN_DATE=$(date '+%Y-%m-%d %H:%M:%S %z')
+#GEN_DATE_TIME=$(date '+%d.%m.%Y %T %Z')
+#
+#ASK_NEXT=true
+#ask_forNext() {
+# local ask $1
+# local item $2
+# echo -n $ask
+#read item
+#case "$item" in
+# y|Y) echo "Ввели «y», продолжаем..."
+# ;;
+# n|N) echo "Ввели «n», завершаем..."
+# exit 0
+# ;;
+# *) echo "Ничего не ввели. Выполняем действие по умолчанию..."
+# ;;
+#esac
+#}
+#${CMD_SSH} ${SSH_OPTS} ${SSHuser}@${SSHhost} system script run MkTmpfs;
+#
+#### Utils #############################################################################################
+CMD_FIND=$(which find)
+CMD_MV=$(which mv)
+CMD_GZ=$(which gzip)
+CMD_CHO=$(which chown)
+CMD_CHM=$(which chmod)
+CMD_MKD=$(which mkdir)" -p "
+CMD_RM=$(which rm)
+CMD_DATE=$(date +%Y%m%d_%H%M) # date in format YYYYMMDD_HHmm
+CMD_SSL=$(which openssl)
+CMD_SSH=$(which ssh)
+CMD_SCP=$(which scp)
+CMD_SFTP=$(which sftp)
+
+ScriptName=$(basename -- "$0")
+# HomeDir=$HOME
+HomeDir="/var/www/ros.vados.ru/Mikrotiks"
+HostsFile=${HomeDir}"/.config/.mikrotiks"
+BinDir=${HomeDir}"/.bin"
+GitDir=${HomeDir}"/backups"
+
+# Set SSH defaults:
+DEFAULT_SSH_PORT="22"
+DEFAULT_SSH_USER="admin"
+DEFAULT_CONNECT_ATTEMPTS=5
+DEFAULT_CONNECT_TIMEOUT=5
+DEFAULT_SSH_KEY=${HomeDir}"/.ssh/id_rsa"
+# Set default diff args:
+DEFAULT_DIFF_ARGS=("-I \"RouterOS\"")
+#
+# Set debug and log options:
+DEBUG_OUT=true
+SAVE_LOG=true
+# Set default LogFile:
+DEFAULT_LOG="/var/log/Mikrotiks/ros-diff.log"
+#
+# Default backup variables:
+DEFAULT_BIN_CRYPT=true
+DEFAULT_BINPWD="BinPwd123"
+DEFAULT_EXP_CRYPT=false
+DEFAULT_EXPPWD="ExpPwd321"
+
+# Handy tput commands:
+#tput bold - Bold effect #'\033[1m'
+#tput rev - Display inverse colors
+#tput sgr0 - Reset everything #'\033[0m'
+#tput setaf {CODE}- Set foreground color, see color {CODE} below
+#tput setab {CODE}- Set background color, see color {CODE} below
+# Colors:
+#0 Black
+#1 Red #'\033[1;31m'
+#2 Green #'\033[1;32m'
+#3 Yellow #'\033[1;33m'
+#4 Blue # '\033[1;34m'
+#5 Magenta # '\033[1;35m'
+#6 Cyan # '\033[1;36m'
+#7 White # '\033[1;37m'
+if [ -t 1 ] && $DEBUG_OUT; then
+ reset=$(tput sgr0)
+ bold=$(tput bold)
+ red=$(tput setaf 1)
+ green=$(tput setaf 2)
+ yellow=$(tput setaf 3)
+ blue=$(tput setaf 4)
+ magenta=$(tput setaf 5)
+ cyan=$(tput setaf 6)
+ white=$(tput setaf 7)
+ toend=$(tput hpa $(tput cols))$(tput cub 6)
+else
+ reset='' bold='' red='' green='' yellow='' blue='' magenta='' cyan='' white='' toend=''
+fi
+
+info() {
+ echo -e "\n${blue}ℹ $*${reset}"
+}
+success() {
+ echo -e "\n${green}✅ $*${reset}"
+}
+error() {
+ echo -e "\n${red}❌ $*${reset}" >&2
+}
+warning() {
+ echo -e "${yellow}⚠ $*${reset}" >&2
+}
+section() {
+ echo -e "\n${magenta}................[$(tput rev) $* ${reset}${magenta}]................${reset}\n"
+}
+
+FRAME=("⠋" "⠙" "⠹" "⠸" "⠼" "⠴" "⠦" "⠧" "⠇" "⠏")
+FRAME_INTERVAL=0.1
+
+start() {
+ local step=0
+ while [ "$step" -lt "${#CMDS[@]}" ]; do
+ ${CMDS[$step]} & pid=$!
+ while ps -p $pid &>/dev/null; do
+ echo -ne "\\r[ ] ${STEPS[$step]} ..."
+ for k in "${!FRAME[@]}"; do
+ echo -ne "\\r[ ${FRAME[k]} ]"
+ sleep $FRAME_INTERVAL
+ done
+ done
+ echo -ne "\\r[ ✔ ] ${STEPS[$step]}\\n"
+ step=$((step + 1))
+ done
+}
+#echo '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏'
+spinner()
+{
+ local pid=$!
+ local delay=0.75
+ local spinstr='|/-\'
+ #'⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏'
+ while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; do
+ local temp=${spinstr#?}
+ printf " [%c] " "${spinstr}"
+ local spinstr=$temp${spinstr%"$temp"}
+ sleep $delay
+ printf "\b\b\b\b\b\b"
+ done
+ printf " \b\b\b\b"
+}
+
+save_log() {
+ local log="${DEFAULT_LOG}"
+ if [ -n "${LogFile}" ]; then
+ log="${LogFile}"
+ fi
+ if ${SAVE_LOG}; then
+ echo "$(date '+%b %d %T') - $*" >> ${log}
+ return 0
+ else
+ return 1
+ fi
+}
+
+get_connections_str() {
+ local opts
+ local log_msg
+ local host
+ local ssh_str
+ local scp_str
+
+# Require router-specific SSH key
+ if [ -n "$DEFAULT_SSH_KEY" ]; then
+ opts=("-i ${DEFAULT_SSH_KEY}" "-o PasswordAuthentication=no")
+ else
+ log_msg="- Error: SSH key not found at $DEFAULT_SSH_KEY\nRun ./setup-ssh-keys.sh to generate the key"
+ if [ -t 1 ] && ${DEBUG_OUT}; then
+ error "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ exit 1
+ fi
+# if [ -n "$DEFAULT_CONNECT_ATTEMPTS" ]; then
+# opts+=("-o ConnectionAttempts=${DEFAULT_CONNECT_ATTEMPTS}")
+# fi
+# if [ -n "$DEFAULT_CONNECT_TIMEOUT" ]; then
+# opts+=("-o ConnectTimeout=${DEFAULT_CONNECT_TIMEOUT}")
+# fi
+ #opts+=("-o PreferredAuthentications=publickey" "-o StrictHostKeyChecking=no" "-o UserKnownHostsFile=/dev/null" \
+ #"-o GlobalKnownHostsFile=/dev/null" "-o CheckHostIP=no")
+SSH_OPTS="${opts[*]}"
+
+# Require router host IP
+ if [ -n "${SSHhost}" ]; then
+ host="${SSHhost}"
+ else
+ log_msg="- Error! SSH Host not found. Exit 1."
+ if [ -t 1 ] && ${DEBUG_OUT}; then
+ error "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ exit 1
+ fi
+
+ ssh_str=("$CMD_SSH" "-2" "-4")
+ scp_str=("${CMD_SCP}" "-2" "-4" "-B ${SSH_OPTS}")
+
+ if [ -n "${SSHport}" ]; then
+ ssh_str+=("-p ${SSHport}")
+ scp_str+=("-P ${SSHport}")
+ else
+ ssh_str+=("-p ${DEFAULT_SSH_PORT}")
+ scp_str+=("-P ${DEFAULT_SSH_PORT}")
+ fi
+
+ if [ -n "${SSHuser}" ]; then
+ ssh_str+=("-l ${SSHuser}")
+ scp_str+=("${SSHuser}@${host}")
+ else
+ ssh_str+=("-l ${DEFAULT_SSH_USER}")
+ scp_str+=("${DEFAULT_SSH_USER}@${host}")
+ fi
+
+ ssh_str+=("${host}")
+
+ssh_str+=("${SSH_OPTS}")
+SSH_STR="${ssh_str[*]}"
+SCP_STR="${scp_str[*]}"
+#SFTP_STR="${sftp_str[*]}"
+#SFTP_OPTS="-i ${DEFAULT_SSH_KEY} -o PasswordAuthentication=no -oPort=${SSHport}"
+}
+
+#>/dev/null 2>&1
+###############################
+# Backup listing
+###############################
+# Get Names Addresses and Ports in $HostsFile
+#declare -rx STEPS=(
+# 'download'
+# 'check'
+# 'backup'
+#)
+#IFS=$'\n'
+run_ssh_cmd() {
+ local run="${1}"
+ warning "${run}"
+ if ${SSH_STR} ${run}; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+download_config() {
+ local conf="${1}"
+ local log_msg
+
+ if ${SSH_STR} export >${conf}; then
+ log_msg="- Config download success!"
+ if [ -t 1 ] && $DEBUG_OUT; then
+ success "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ return 0
+ else
+ log_msg="- Config download ${conf} error! Exit Error 1."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ error "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ exit 1
+ fi
+}
+
+compare_config() {
+ local config_file="${1}"
+ local precedent_file="${2}"
+ local diff_file="${3}"
+ local diff_args=${DEFAULT_DIFF_ARGS}
+ local log_msg
+
+ diff ${diff_args} ${config_file} ${precedent_file} >${diff_file}
+ if [ "$?" -ne "0" ]; then
+ log_msg="- There is a difference! Create backup..."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ section " CREATE BACKUP "
+ sleep 1
+ info "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ return 0
+ else
+ log_msg="- The files are identical. No backup is required."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ section " START CLEANUP "
+ sleep 1
+ info "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ log_msg="- Remove ${diff_file} file."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ info "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ ${CMD_RM} -f ${diff_file}
+ log_msg="- Remove ${config_file} file."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ info "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ ${CMD_RM} -f ${config_file}
+
+ return 1
+ fi
+}
+
+check_directory() {
+ local chk_dir="${1}"
+ local log_msg
+
+ if [[ -d ${chk_dir} && -r ${chk_dir} ]]
+ then
+ return 0
+ else
+ if $CMD_MKD ${chk_dir}; then
+ log_msg="- Direcory ${chk_dir} created."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ success "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ return 0
+ else
+ log_msg="- Error create direcory ${chk_dir}! Exit 1."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ error "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ exit 1
+ fi
+# This script must be run by a special user in his home directory.
+# Therefore, the following lines are not needed.
+# $CMD_CHO root:root $dir
+# $CMD_CHM 755 $ST_FULL
+ fi
+}
+
+#${SSH_STR} /system script environment get [find name=BackupPassword] value;
+#exit 0
+backup_binary() {
+ local bin_name="${1}"
+ local crypt="${DEFAULT_BIN_CRYPT}"
+ local bin_pass="${DEFAULT_BINPWD}"
+ local log_msg
+ local crypt_str
+ #${SSH_STR} :put [/system script environment get [find name=BackupPassword] value];
+
+ if ${SSH_STR} /system/script environment find where name=BackupEncrypt && ${SSH_STR} /system/script environment find where name=BackupPassword; then
+
+ bin_pass=${SSH_STR} /system/script/environment/get ([ /system/script/environment find name='BackupPassword' ]->value);
+ crypt_str="dont-encrypt=no password=${bin_pass}"
+ warning "${crypt_str}"
+ else
+ if [ -n ${crypt} ] && [ -n {passwd} ]; then
+ crypt_str="dont-encrypt=no password=${passwd}"
+ else
+ crypt_str="dont-encrypt=yes"
+ fi
+
+ fi
+ # if [ -n $]; then
+
+# local BKPSTR="system backup save name=${bin_name} dont-encrypt=no password=$BKP_BINPWD"
+# T_BKPCLN="file remove [find name=$TGT_BKPNAME_BIN]"
+}
+
+readarray -t lines < $HostsFile
+#declare -r STEPS=($lines)
+#declare -r MAX_STEPS=${#lines[@]}
+#declare -r BAR_SIZE="##########"
+#declare -r MAX_BAR_SIZE=${#BAR_SIZE}
+
+for HR in "${lines[@]}"; do
+# perc=$(((HR + 1) * 100 / MAX_STEPS))
+# percBar=$((perc * MAX_BAR_SIZE / 100))
+# declare -rx CMDS=(
+# "${CMD_SSH} ${SSH_OPTS} ${SSHuser}@${SSHhost} export >$current_config"
+# 'sleep 10'
+# 'sleep 1'
+#)
+while IFS=$' ' read -a HR ; do
+#|| [ -n "$HR" ]; do
+[[ -z ${HR[0]} ]] && continue
+
+DStamp=$(date '+%Y%m%d')
+DTStamp=$(date '+%Y%m%d%H%M%S')
+
+RouterName=${HR[0]}
+SSHhost=${HR[1]}
+SSHport=${HR[2]}
+SSHuser=${HR[3]}
+SSHpassword=${HR[4]}
+
+get_connections_str
+backup_binary "BinaryTest.backup"
+
+exit 0
+#warning "SSH_STR = ${SSH_STR}"
+#warning "SCP_STR = ${SCP_STR}"
+#exit 0
+
+BaseDir=${HomeDir}"/backups/${RouterName}/"
+TempDir=${BaseDir}"tmp/"
+HistoryDir=${BaseDir}"history/"
+LogFile="/var/log/Mikrotiks/${RouterName}.log"
+log_msg="undefined"
+
+log_msg="- Start backup script ${ScriptName} for ${RouterName}"
+if [ -t 1 ] && $DEBUG_OUT; then
+ info "${RouterName} ${log_msg}"
+ echo
+fi
+save_log "${log_msg}"
+
+log_msg="- Check and creatre services directories for ${RouterName} if not exsist..."
+if [ -t 1 ] && $DEBUG_OUT; then
+ section " CHECK DIRS "
+ info "${RouterName} ${log_msg}"
+fi
+save_log "${log_msg}"
+
+CheckDirs=("${BaseDir}" "${TempDir}" "${HistoryDir}")
+for dir in "${CheckDirs[@]}"; do
+(check_directory "${dir[@]}")
+done
+
+log_msg="All Directories for ${RouterName} was created sucessfully!"
+if [ -t 1 ] && $DEBUG_OUT; then
+ success "${log_msg}"
+fi
+save_log "- ${log_msg}"
+
+log_msg="Set variables for ${RouterName}..."
+if [ -t 1 ] && $DEBUG_OUT; then
+ info "${log_msg}"
+fi
+save_log "- ${log_msg}"
+
+precedent_config=${BaseDir}"Precedent-Config.rsc"
+current_config=${TempDir}"Config.rsc"
+diff_config=${TempDir}"Diff-Config.rsc"
+current_backup="Binary.backup"
+
+log_msg="Set variables for ${RouterName} success!"
+if [ -t 1 ] && $DEBUG_OUT; then
+ success "${log_msg}"
+fi
+save_log "- ${log_msg}"
+
+section " CHECK CONFIG "
+log_msg="- Download ${current_config} file to Temp Directory..."
+if [ -t 1 ] && $DEBUG_OUT; then
+ info "${RouterName} ${log_msg}"
+fi
+save_log "- ${log_msg}"
+
+download_config "${current_config}"
+
+log_msg="- Comparing with the previous config..."
+if [ -t 1 ] && $DEBUG_OUT; then
+ info "${RouterName} ${log_msg}"
+fi
+save_log "- ${log_msg}"
+
+if compare_config ${current_config} ${precedent_config} ${diff_config} ${RouterName} ${LogFile}; then
+ BackupDir=${BaseDir}"${DStamp}/"
+ ${CMD_MKD} ${BackupDir}
+
+ save_config=${BackupDir}"${DTStamp}-Config.rsc"
+ save_backup=${BackupDir}"${DTStamp}-Binary.backup"
+
+ log_msg="- Copy ${current_config} file to ${BackupDir} directory..."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ info "${RouterName} ${log_msg}"
+ fi
+ save_log "- ${log_msg}"
+
+ cp ${current_config} ${save_config}
+
+ ${CMD_RM} -f ${precedent_config}
+
+ ${CMD_MV} -f ${current_config} ${precedent_config}
+
+ log_msg="- Copy configuration to ${BackupDir}/${save_config} and ${precedent_config} success."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ success "${RouterName} ${log_msg}"
+ fi
+ save_log "- ${log_msg}"
+
+ log_msg="Create ${current_backup} file on ${RouterName}..."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ info "${log_msg}"
+ fi
+ save_log "- ${log_msg}"
+# if [ $? -eq 0 ]; then
+ if ${SSH_STR} system backup save name=${current_backup}; then
+ log_msg="Create binary backup ${current_backup} on ${RouterName} success."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ success "${log_msg}"
+ fi
+ save_log "- ${log_msg}"
+
+ log_msg="- Start download ${current_backup} file to ${BackupDir}..."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ info "${RouterName} ${log_msg}"
+ fi
+ save_log "- ${log_msg}"
+
+# if ${SFTP_STR}:$current_backup; then
+ # ${CMD_SFTP} ${SFTP_OPTS} ${SSHuser}@${SSHhost}:$current_backup
+ if ${SCP_STR}:/${current_backup} ${save_backup}; then
+ sleep 2
+ log_msg="- Binary Backup download complete!"
+ if [ -t 1 ] && $DEBUG_OUT; then
+ success "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ else
+ log_msg="- Error! Save binary backup on ${RoutrName} failed!"
+ if [ -t 1 ] && $DEBUG_OUT; then
+ error "${log_msg}"
+ fi
+ save_log "${log_msg}"
+ fi
+ else
+ log_msg="Error create binary backup ${current_backup} on ${RouterName}!"
+ if [ -t 1 ] && $DEBUG_OUT; then
+ error "${log_msg}"
+ fi
+ save_log "- ${log_msg}"
+ fi
+
+ log_msg="- Remove ${current_backup} file on ${RouterName}."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ section "CLEANUP"
+ info "${log_msg}"
+ fi
+ save_log "- ${log_msg}"
+
+ if ${SSH_STR} /file remove ${current_backup}; then
+ log_msg="- Remove ${current_backup} file on ${RouterName} complete succesfully!"
+ if [ -t 1 ] && $DEBUG_OUT; then
+ success "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ else
+ log_msg="- Error Remove ${current_backup} file on ${RouterName}!"
+ if [ -t 1 ] && $DEBUG_OUT; then
+ error "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ fi
+
+ cd "${BaseDir}"
+
+ CurrentHistoryDir=${HistoryDir}"${DStamp}/"
+ ${CMD_MKD} -p ${CurrentHistoryDir}
+ diff_config_history=${CurrentHistoryDir}"${DTStamp}-Diff-Config.rsc"
+ log_msg="- Move ${diff_config} file to ${CurrentHistoryDir}."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ info "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+
+ if ${CMD_MV} -f ${diff_config} ${diff_config_history}; then
+ log_msg="- Move ${diff_config} file to ${CurrentHistoryDir} complete succesfully!"
+ if [ -t 1 ] && $DEBUG_OUT; then
+ success "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ else
+ log_msg="- Error move ${diff_config} file to ${CurrentHistoryDir}!"
+ if [ -t 1 ] && $DEBUG_OUT; then
+ error "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ fi
+
+ log_msg="- Go to Git directory (${GitDir}), add backups files and commit him."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ section " COMMIT "
+ info "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ cd "${GitDir}/"
+ git add .
+ log_msg="- Git add commit..."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ info "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ if git commit -m "Backup for ${RouterName} sucessfully creatd at $(date '+%b %d %T')."; then
+ log_msg=" - Git add commit success."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ success "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ else
+ log_msg="- Git add commit Error!"
+ if [ -t 1 ] && $DEBUG_OUT; then
+ error "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ fi
+ log_msg="- Git push commit..."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ info "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ if git push origin main; then
+ log_msg=" - Git push commit success."
+ if [ -t 1 ] && $DEBUG_OUT; then
+ success "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ else
+ log_msg="- Git push commit Error!"
+ if [ -t 1 ] && $DEBUG_OUT; then
+ error "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+ fi
+else
+ log_msg="- ${RouterName} backup complete!"
+ if [ -t 1 ] && $DEBUG_OUT; then
+ info "${RouterName} ${log_msg}"
+ fi
+ save_log "${log_msg}"
+fi
+
+log_msg="- Remove Temp directory."
+if [ -t 1 ] && $DEBUG_OUT; then
+ info "${RouterName} ${log_msg}"
+fi
+ save_log "${log_msg}"
+
+${CMD_RM} -d ${TempDir}
+log_msg="- backup complete!"
+if [ -t 1 ] && $DEBUG_OUT; then
+ success "${RouterName} ${log_msg}"
+fi
+save_log "${log_msg}"
+
+done <<<"$(echo -e $HR)"
+LogFile="${DEFAULT_LOG}"
+# echo -ne "\\r[${BAR_SIZE:0:percBar}] $perc %"
+#echo "[] $perc %"
+done
+log_msg="All Done! Exit 0."
+if [ -t 1 ] && $DEBUG_OUT; then
+ section " DONE "
+ success "${log_msg}"
+fi
+save_log "${log_msg}"
+exit 0
--- /dev/null
+:global MkDir;
+:put [($MkDir /usb1/tmpfs)];
+:log warning ("\$MkDir = " . $MkDir . ".");
--- /dev/null
+#!/bin/bash
+# Add to cron
+# crontab -e
+#*/20 * * * * /var/www/ros.vados.ru/Mikrotiks/.bin/ros-diff.sh
+#set +eo pipefail
+#set -x
+#
+DEBUG_OUT=true
+if [ -t 1 ] && $DEBUG_OUT; then
+ reset='\033[0m'
+ bold=$(tput bold)
+ #'\033[1m'
+ red=$(tput setaf 7)$(tput setab 1)
+ #'\033[1;31m'
+ green=$(tput setaf 4)$(tput setab 7)$(tput bold)
+ #'\033[1;32m'
+ yellow='\033[1;33m'
+ blue='\033[1;34m'
+ magenta='\033[1;35m'
+ cyan='\033[1;36m'
+ white='\033[1;37m'
+else
+ reset='' bold='' red='' green='' yellow='' blue='' cyan='' magenta='' white=''
+fi
+
+info() {
+ if $DEBUG_OUT; then
+ echo -e "${blue}ℹ $*${reset}"
+ fi
+}
+success() {
+ if $DEBUG_OUT; then
+ echo -e "${bold}${green}✅ $*${reset}"
+ fi
+}
+error() {
+ if $DEBUG_OUT; then
+ echo -e "${red}❌ Error: $*${reset}" >&2
+ fi
+}
+warning() {
+ if $DEBUG_OUT; then
+ echo -e "${yellow}⚠ $*${reset}" >&2
+ fi
+}
+section() {
+ if $DEBUG_OUT; then
+ echo -e "\n${magenta}====$*====${reset}"
+ fi
+}
+toend=$(tput hpa $(tput cols))$(tput cub 6)
+toend_ok() {
+ if $DEBUG_OUT; then
+ echo -n "${toend}${white}[${green}OK${white}]"
+ fi
+}
+toend_error() {
+ if $DEBUG_OUT; then
+ echo -n "${toend}${white}[${red}ERROR${white}]"
+ fi
+}
+BR() {
+ if $DEBUG_OUT; then
+ echo -e "\n"
+ fi
+}
+
+error "error"
+success "success"
+exit 0
+
+# HomeDir=$HOME
+HomeDir="/var/www/ros.vados.ru/Mikrotiks"
+HostsFile=${HomeDir}"/.config/.mikrotiks"
+BinDir=${HomeDir}"/.bin"
+GitDir=${HomeDir}"/backups"
+
+SSH_KEY=${HomeDir}"/.ssh/id_rsa"
+# Require router-specific SSH key
+if [ ! -f "$SSH_KEY" ]; then
+ error "Error: SSH key not found at $SSH_KEY"
+ error "Run ./setup-ssh-keys.sh to generate the key"
+ exit 1
+fi
+
+###############################
+# Backup listing
+###############################
+# Get Names Addresses and Ports in $HostsFile
+
+readarray -t lines < $HostsFile
+
+for HR in "${lines[@]}"; do
+while IFS=$' ' read -a HR ; do
+#|| [ -n "$HR" ]; do
+[[ -z ${HR[0]} ]] && continue
+
+#GEN_DATE=$(date '+%Y-%m-%d %H:%M:%S %z')
+GEN_DATE=$(date '+%d.%m.%Y')
+GEN_TIME=$(date '+%b %d %T')
+GEN_DATE_TIME=$(date '+%d.%m.%Y %T %Z')
+DStamp=$(date '+%Y%m%d')
+
+RouterName=${HR[0]}
+SSHhost=${HR[1]}
+SSHport=${HR[2]}
+SSHuser=${HR[3]}
+SSHpassword=${HR[4]}
+
+BaseDir=${HomeDir}"/backups/"${RouterName}
+TempDir=${BaseDir}"/tmp"
+HistoryDir=${BaseDir}"/history"
+LogFile="/var/log/Mikrotiks/"${RouterName}".log"
+
+SSH_OPTS="-i $SSH_KEY -o PasswordAuthentication=no -p ${SSHport}"
+SFTP_OPTS="-i $SSH_KEY -o PasswordAuthentication=no -oPort=${SSHport}"
+echo "${GEN_DATE_TIME} - Start backup script ${ARGV[0]} for ${RouterName}" >> ${LogFile}
+section "Create dirs"
+info "Create servise directories for ${RouterName}..."
+echo "${GEN_TIME} - Create services directories for ${RouterName}..." >> ${LogFile}
+mkdir -p ${BaseDir}
+mkdir -p ${TempDir}
+mkdir -p ${HistoryDir}
+echo "${GEN_TIME} - All Directories for ${RouterName} was created sucessfully!" >> ${LogFile}
+success "All directories for ${RouterName} was created sucessfully!"
+echo "${GEN_TIME} - Set variables for ${RouterName}..." >> ${LogFile}
+info "Set variables for ${RouterName}..."
+precedent_config=${BaseDir}"/Precedent-Config.rsc"
+current_config="Config.rsc"
+current_backup="Binary.backup"
+diff_config=${TempDir}"/Diff-Config.rsc"
+echo "${GEN_TIME} - Set variables for ${RouterName} success!" >> ${LogFile}
+success "Set variables for ${RouterName} success!"
+#ssh ${SSH_OPTS} ${SSHuser}@${SSHhost} system script run MkTmpfs;
+cd ${TempDir}
+section ""
+BR
+section "Start checkout process"
+info "Download ${current_config} file to Temp Directory..."
+echo "${GEN_TIME} - Download ${current_config} file to ${TempDir}" >> ${LogFile}
+ssh ${SSH_OPTS} ${SSHuser}@${SSHhost} export >$current_config
+if [ $? -eq 0 ]; then
+echo
+toend_ok
+echo
+echo "${GEN_TIME} - Download complete!" >> ${LogFile}
+else
+echo
+toend_error
+echo
+echo "${GEN_TIME} - Download ${current_config} failed!" >> ${LogFile}
+exit 1
+fi
+info "Comparing with the previous config..."
+echo "${GEN_TIME} - Comparing with the previous config..." >> ${LogFile}
+diff -I "RouterOS" ${current_config} ${precedent_config} >${diff_config}
+if [ "$?" -ne "0" ]; then
+echo "${GEN_TIME} - There is a difference! Create backup..." >> ${LogFile}
+section "Create backup for ${RouterName}"
+BackupDir=${BaseDir}"/"${DStamp}
+mkdir -p ${BackupDir}
+DTStamp=$(date '+%Y%m%d%H%M%S')
+save_config=${DTStamp}"-Config.rsc"
+save_backup=${DTStamp}"-Binary.backup"
+diff_config_history=${DTStamp}"-Diff-Config.rsc"
+echo "${GEN_TIME} - Copy ${current_config} file to ${BackupDir} directory..." >> ${LogFile}
+cd ${TempDir}
+rm -f ${precedent_config}
+cp ${current_config} ${BackupDir}"/"${save_config}
+mv -f ${current_config} ${precedent_config}
+echo "${GEN_TIME} - Copy configuration to ${BackupDir}/${save_config} and ${precedent_config} success." >> ${LogFile}
+success "Copy configuration to ${BackupDir}/${save_config} and ${precedent_config} success."
+info "Create ${current_backup} file on ${RouterName}..."
+echo "${GEN_TIME} - Create ${current_backup} file on ${RouterName}..." >> ${LogFile}
+ssh ${SSH_OPTS} ${SSHuser}@${SSHhost} system backup save name=${current_backup}
+if [ $? -eq 0 ]; then
+echo
+toend_ok
+echo
+echo "${GEN_TIME} - Create binary backup ${current_backup} on ${RouterName} success." >> ${LogFile}
+info "Start download ${current_backup} file to ${BackupDir}..."
+echo "${GEN_TIME} - Start download ${current_backup} file to ${BackupDir}..." >> ${LogFile}
+sftp ${SFTP_OPTS} ${SSHuser}@${SSHhost}:$current_backup
+sleep 1
+success "Download complete!"
+echo "${GEN_TIME} - Download complete!" >> ${LogFile}
+cd ${BackupDir}
+sleep 2
+mv -f ${TempDir}"/"${current_backup} ${save_backup}
+echo "${GEN_TIME} - Remove ${current_backup} file on ${RouterName}." >> ${LogFile}
+ssh ${SSH_OPTS} ${SSHuser}@${SSHhost} /file remove ${current_backup}
+else
+echo
+toend_error
+echo
+echo "${GEN_TIME} - Create binary backup ${current_backup} failed!" >> ${LogFile}
+ssh ${SSH_OPTS} ${SSHuser}@${SSHhost} /file remove $current_backup
+exit 1
+fi
+cd ${TempDir}
+CurrentHistoryDir=${HistoryDir}"/"${DStamp}
+mkdir -p ${CurrentHistoryDir}
+echo "${GEN_TIME} - Move ${diff_config} file to ${CurrentHistoryDir}." >> ${LogFile}
+mv -f ${diff_config} ${CurrentHistoryDir}"/"${diff_config_history}
+echo "${GEN_TIME} - Move ${diff_config} file to ${CurrentHistoryDir} complete." >> ${LogFile}
+echo "${GEN_TIME} - Go to Git directory (${GitDir}), add backups files and commit him." >> ${LogFile}
+rm -d ${TempDir}
+cd ${GitDir}
+git add .
+echo "${GEN_TIME} - Git add commit..." >> ${LogFile}
+git commit -m "Backup for ${RouterName} sucessfully creatd at ${GEN_TIME}."
+echo "${GEN_TIME} - Done." >> ${LogFile}
+echo "${GEN_TIME} - Git push..." >> ${LogFile}
+git push origin main
+echo "${GEN_TIME} - Done." >> ${LogFile}
+echo "${GEN_TIME} - ${RouterName} backup complete!" >> ${LogFile}
+success "${RouterName} backup complete!"
+fi
+section "The files are identical. No backup is required."
+echo "${GEN_TIME} - The files are identical. No backup is required." >> ${LogFile}
+echo "${GEN_TIME} - Remove ${diff_config} file." >> ${LogFile}
+info "Remove ${diff_config} file."
+rm -f ${diff_config}
+echo "${GEN_TIME} - Remove ${current_config} file." >> ${LogFile}
+info "Remove ${current_config} file."
+rm -f ${current_config}
+echo "${GEN_TIME} - Remove Temp directory." >> ${LogFile}
+info "Remove Temp directory."
+rm -d ${TempDir}
+section ""
+success "${RouterName} backup complete!"
+echo "${GEN_TIME} - ${RouterName} backup complete!" >> ${LogFile}
+done <<<"$(echo -e $HR)"
+done
+section "All Done!"
+echo "All Done!" >> ${LogFile}
+exit 0
--- /dev/null
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQINBGmljUMBEACxefwXx+q16488USN0uBplV3ZXRqZVSz7B92L0tSGjuND75WFS
+xLty5U1EnAu18Fgh3pKGsznHo4wFbzsOX7EG9DWff7PZAeexlO72iB8xeLdsBPVM
+rXCnYCend3k7PfsHHf9ymhfNho1sasCO792/03cVdSxpEJeiHUW3BgvPHynk87Fm
+I1LW4mhlhBvPAuVOyTz1t+iAJoVcxSAhKFDJ7eMx1yK/bUL0aRTJcy8MmFi4lg3i
+Hh7va8gCHlznPnlMaFJm37T3eaXzjKReSL2f0BVBkFYGHSiEie2k7vXz2fXN7url
+qwKL73fbkOPh60QnH5m5uPjIFk74kxTnNhro80krPFwIx85aRL2L23+qBMznP6cg
+jk2/xX1hP/fIg0YLmmJBwgrNpHJAwfpsaj8BQeNnq2bNHSwqvJdmGDxiuTL7OKu3
+YY+03E0FvZwHpFmm55BwuFyjRGCLoDuShgleZAIfE8rWaApW1YBxUCnp8BMH5kCB
+UE8cpd5qzPvwlc/50ZAchXJ553w5Um6d1ys3X3O4fr2SksTr3QBy7G8rwUHVqYqB
+FuPHyD9X4wBeGKkQlm/BvLdrqXLobosS+gHKK/AYm+Fe+GB+XAIf+Th89Zd0t3Ca
+cTZcezVNmTrW27VRICNet6enePZ+HcLBRT9oP/VO3q4wty86cyUXPlGSFQARAQAB
+tDh2YWRvcy1kZXYgKEdQRyBLZXkgZm9yIHZhZG9zLWRldiA0MDk2LikgPHZhZG9z
+QHZhZG9zLnJ1PokCUQQTAQgAOxYhBKvkz2GoXN1uFfLALfzF5MdAe4v3BQJppY1D
+AhsDBQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAAAoJEPzF5MdAe4v3lMcQAKHn
+TkFfZlCTU1M2KAMzrmXseu9rO7WhYOsYAUehThYU4z6BM1jHv8HLtK+A9i1ncRdm
+qhSL6xWiYE3YT9Bhb2wDaYWLAnRILJtevSCtlqssvjFRfT+9rs3QNxgagQNQuwKq
+UCdnpC1pVj9anVd6H01uJKrr1V++uAca1YxiQwOGnIbw+Z++02eFjvmkqzQo3nwM
+rpKoyo6axqUiBwl9iXJH34qBjtwGiCt2UYl0RCZj5O1j0gpKgqgRHB4B+F2Tp1Jw
+VvfwKmtHymycf0VgvKybhy4PNJcmmFnQOCjJ5ttp7Je3M9jGwtAxHoVcrXtQNTPv
+CZfu8dPX/0GJCmxePW3NTxXhSeOZ/j5nKXdgXjsgcq9tajPBe98dNobfGu1ySWf6
+3vTx1B1hBQeZWTT56RLxzX6u1v9N3WbKjOxVcxRoxWw38zLw3LkXCdGwWgDfyWPF
+v/M7U2sncdCBkmfgcL6dwAjeD+3T/W+iter5POXK+AJ/dy1Zj74sgVfY6rA9A4sI
+9/H2YR4auNMsnpw10qRn+3bPmQkWWR1DrNU5YtQT+Hv+wMpxQYIWyFZWQ00c66SQ
+mfAianad00R5LfR+FpOxgHDZi6qUP1zRjNqjBfQ/OGn4IQZU3CCxK4bKRjMbORc4
+uxwWphbhLLOq3BBS9e7M4RErPtguP1s26vdJLUXauQINBGmljUMBEADBEmQjup5c
+uyjgUBRYvheFNo8ufoD3u08vEybjN68bhdX31NLWUVNL4uoQkYQHI+iKEybkEOF9
+Ac/c5IoDOQ4f5u16d/Aupf1gbDZn7Dy1tNK34qxJjzC5PnWXoy4k1UfuO7/aDfsl
+9Vkl41UwTf4Pc88JxK0DJqFqGvGcL/Z7bHGVjuFmfoeLDrHk4yuXhqHlHQLeMQRW
+wpsZSayzRqNFNlgIFUSyf2WYfuA9AbLc6MseIbEI6zzVCuCq1zLAMkB+fyhijP8i
+s5Z1p+pT0zShV4JVnBcWceSV4Jhc2518+MvWaRtulLSyEJ+uuG2AOXbSmU45MR81
+jRAozUe31ObUzZb1eYJpsIekSCubDEfRaTdQnZ5dn+Vr2qAnLoZljWNrkyn4ABe4
+lPW/nDpPDUwOgiTQFs0BMpWDdceuBzCS7tkuGi7trm817DcaCKwpr/bJziLCPvRe
+vWjenHAykVK88k0jdTk9Hz09wVNOMJTRsUrgY2TtbklW3W35TF3mzgiQHwyNJ9Ya
+C4rr1orhmpDYNYIJhK5VItbEwGV64s2rSDAayYsMIFsSemPdyq9SxNzbtP8PSJgH
+Uyd0CWFwcJxz/06qblaK08mHSWhpuBMVzpjoJrtKTSlGU0TTX2ulUhyDpZy9tYkZ
+wscPc1nIV3KBLtg9iND4r2S6TbqQbJD8oQARAQABiQI2BBgBCAAgFiEEq+TPYahc
+3W4V8sAt/MXkx0B7i/cFAmmljUMCGwwACgkQ/MXkx0B7i/ecug/9H0yWseXEcd9t
+qUiQfKOEwzYhC/RCKikDb17aOuk0W43qhGy68bVk0no4D6ZMlGghwh//NO/6S49p
+16mlHSlOq1bo97Ux1v6uUq/o/JZRwaxMROUxGqMtybhrLwf7rtK9pAhvteUHJpd2
+OIiwO0n/UPTHPa1ZeUllgCTtrNzO8CHr71S/7RRQr1cN8kf4MMqRcAK7Du8DncC5
+WiFl5eOY6qyHEjAhRVr3aO2zUuWLUpaopKlpEYMFxBSaZdBrCsPbX6CMZrE/OUwr
+e0szl33gKb33B4rRpLOFpMT5OySe7ggyfC2gLQvZjWYkVAIAquTvYqsC5d6fWNY8
+9KOEYBjM5ZzHOYenGHiQPOMMCV5nWyZOHYwwvV+EUgSLo42zHW5wWA+yTpVAmHQy
+dJWodLwZviEyyeSUbEluzYzRvpO2s0avaqIhPCkv1p7iuaRBsGt9ro4I/9Kfl3OZ
+v0iWd1iJE6xOceIx6MMI0bIBndXvkbiyyP5AGk52hsmHkxmz8D7IAEFnT27tsly+
+T69wTo+lihCKAMAMMYKz4a6FoTfMwJdSmQU/XIc5mUUm01Phtavibzsunkc8/HAI
+8ZWS7f0TqjQwiTUDQHaiUwOtr4yVcd001xZK8agEBuFSoxZ2gGbR3MppS5SuIY/N
+xxhbToemQWa7K4H99vyLZtG1OhOC0lk=
+=wMLT
+-----END PGP PUBLIC KEY BLOCK-----
--- /dev/null
+Midnight Commander TreeStore v 2.0
--- /dev/null
+MikroNUC 10.30.30.10 2222 mikro_bak Peskar55
+MikroMaster 10.30.30.81 2222 mikro_bak Peskar55
+MikroYellow 10.30.30.86 2222 mikro_bak Peskar55
--- /dev/null
+[Midnight-Commander]
+verbose=true
+shell_patterns=true
+auto_save_setup=true
+preallocate_space=false
+auto_menu=false
+use_internal_view=true
+use_internal_edit=true
+clear_before_exec=true
+confirm_delete=true
+confirm_overwrite=true
+confirm_execute=false
+confirm_history_cleanup=true
+confirm_exit=false
+confirm_directory_hotlist_delete=false
+confirm_view_dir=false
+safe_delete=false
+safe_overwrite=false
+use_8th_bit_as_meta=false
+mouse_move_pages_viewer=true
+mouse_close_dialog=false
+fast_refresh=false
+drop_menus=true
+wrap_mode=true
+old_esc_mode=true
+cd_symlinks=true
+show_all_if_ambiguous=false
+use_file_to_guess_type=true
+alternate_plus_minus=false
+only_leading_plus_minus=true
+show_output_starts_shell=false
+xtree_mode=false
+file_op_compute_totals=true
+classic_progressbar=true
+use_netrc=true
+ftpfs_always_use_proxy=false
+ftpfs_use_passive_connections=true
+ftpfs_use_passive_connections_over_proxy=false
+ftpfs_use_unix_list_options=true
+ftpfs_first_cd_then_ls=true
+ignore_ftp_chattr_errors=true
+editor_fill_tabs_with_spaces=false
+editor_return_does_auto_indent=false
+editor_backspace_through_tabs=false
+editor_fake_half_tabs=true
+editor_option_save_position=true
+editor_option_auto_para_formatting=false
+editor_option_typewriter_wrap=false
+editor_edit_confirm_save=true
+editor_syntax_highlighting=false
+editor_persistent_selections=true
+editor_drop_selection_on_copy=true
+editor_cursor_beyond_eol=false
+editor_cursor_after_inserted_block=false
+editor_visible_tabs=true
+editor_visible_spaces=true
+editor_line_state=false
+editor_simple_statusbar=false
+editor_check_new_line=false
+editor_show_right_margin=false
+editor_group_undo=true
+editor_state_full_filename=true
+editor_ask_filename_before_edit=false
+nice_rotating_dash=true
+mcview_remember_file_position=false
+auto_fill_mkdir_name=true
+copymove_persistent_attr=true
+pause_after_run=2
+mouse_repeat_rate=100
+double_click_speed=250
+old_esc_mode_timeout=1000000
+max_dirt_limit=10
+num_history_items_recorded=60
+vfs_timeout=60
+ftpfs_directory_timeout=900
+ftpfs_retry_seconds=30
+fish_directory_timeout=900
+editor_tab_spacing=8
+editor_word_wrap_line_length=72
+editor_option_save_mode=0
+editor_backup_extension=~
+editor_filesize_threshold=64M
+editor_stop_format_chars=-+*\\,.;:&>
+mcview_eof=
+skin=default
+
+filepos_max_saved_entries=1024
+shadows=true
+shell_directory_timeout=900
+
+[Layout]
+output_lines=0
+left_panel_size=88
+top_panel_size=0
+message_visible=false
+keybar_visible=false
+xterm_title=true
+command_prompt=true
+menubar_visible=false
+free_space=true
+horizontal_split=false
+vertical_equal=true
+horizontal_equal=true
+
+[Misc]
+timeformat_recent=%b %e %H:%M
+timeformat_old=%b %e %Y
+ftp_proxy_host=gate
+ftpfs_password=anonymous@
+display_codepage=ASCII
+source_codepage=ASCII
+autodetect_codeset=
+spell_language=en
+clipboard_store=
+clipboard_paste=
+
+[Colors]
+base_color=
+xterm-256color=
+color_terminals=
+linux=
+xterm=
+
+[Panels]
+simple_swap=false
+show_mini_info=true
+kilobyte_si=false
+mix_all_files=false
+show_backups=true
+show_dot_files=true
+fast_reload=false
+fast_reload_msg_shown=false
+mark_moves_down=true
+reverse_files_only=true
+auto_save_setup_panels=false
+navigate_with_arrows=true
+panel_scroll_pages=true
+panel_scroll_center=false
+mouse_move_pages=true
+filetype_mode=true
+permission_mode=false
+torben_fj_mode=false
+quick_search_mode=2
+select_flags=6
+
+[FindFile]
+file_case_sens=true
+file_shell_pattern=true
+file_find_recurs=true
+follow_symlinks=true
+file_skip_hidden=false
+file_all_charsets=false
+content_case_sens=true
+content_regexp=false
+content_first_hit=false
+content_whole_words=false
+content_all_charsets=false
+ignore_dirs_enable=true
+ignore_dirs=
+
+[Panelize]
+Find *.orig after patching=find . -name \\*.orig -print
+Find rejects after patching=find . -name \\*.rej -print
+Modified git files=git ls-files --modified
+Find SUID and SGID programs=find . \\( \\( -perm -04000 -a -perm /011 \\) -o \\( -perm -02000 -a -perm /01 \\) \\) -print
--- /dev/null
+[New Left Panel]
+display=listing
+reverse=false
+case_sensitive=true
+exec_first=false
+sort_order=name
+list_mode=full
+brief_cols=2
+user_format=half type name | size | perm
+user_status0=half type name | size | perm
+user_status1=half type name | size | perm
+user_status2=half type name | size | perm
+user_status3=half type name | size | perm
+user_mini_status=false
+list_format=full
+
+[New Right Panel]
+display=listing
+reverse=false
+case_sensitive=true
+exec_first=false
+sort_order=name
+list_mode=full
+brief_cols=2
+user_format=half type name | size | perm
+user_status0=half type name | size | perm
+user_status1=half type name | size | perm
+user_status2=half type name | size | perm
+user_status3=half type name | size | perm
+user_mini_status=false
+list_format=full
+
+[Dirs]
+current_is_left=true
+other_dir=/mnt/d/dst/D41/vbmeta-tools
--- /dev/null
+{
+ "auths": {
+ "ghcr.io": {
+ "auth": "cG9ydGFpbmVyX3J1bm5lcjpnaHBfV2pQRmh1SmxuTnhUQ3M5bzJJRVRSSFM4TnBIdUxuNEtnZ05V"
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+[user]
+ name = vados-dev
+ email = vados@vados.ru
+ signingkey = 1FD2694762FCE438
+[color]
+ ui = auto
+[safe]
+ directory = /home/vados/sl8541e_cus_go
+ directory = /var/www/ros.vados.ru/html/mikrotik-routeros-scripts
+ directory = /var/www/ros.vados.ru/Mikrotiks/backups
+ directory = /var/www/ros.vados.ru
+ directory = /.data/nfs/repos/Mikrotiks/ros.vados.ru.git
+ directory = /.data/nfs/repos/Mikrotiks/ros.vados.ru.git
+[init]
+ defaultBranch = main
+[core]
+ autocrlf = false
+[http]
+ cookiefile = %USERPROFILE%\\.gitcookies
+[protocol]
+ version = 2
+[commit]
+ gpgsign = true
+[gpg]
+ program = /usr/bin/gpg
--- /dev/null
+# folder for backups repo
+backups
+# backup and temporary files
+*~
+# patches and related files
+*.orig
+*.patch
+*.rej
+*.diff
+checksums.json
--- /dev/null
+default-cache-ttl 34560000
+max-cache-ttl 34560000
--- /dev/null
+keyid-format 0xlong
+throw-keyids
+no-emit-version
+no-comments
--- /dev/null
+Created: 20260302T170556
+Key: (private-key (rsa (n #00B9B822209385B68B96FB3A8BA6FCF3EFCD44E21837
+ 2D539F38B630EFB0EDB11405170AF4BBB3DB7D9A79317B116BA6EF237B7442E4519E20
+ 68AD77F9157FA18F2178F53749741B02A341BCC9807D9BD264D8B2B06A0D77F8D326D2
+ F78740C444E48C8456B02A87ED954CC806EADDAB050359DC5E9BB06DD451456C8EE247
+ 551A9382345B75A5EAFFC889B0DCA08A05E992BB13C5599C62B69C35E8CC4E9B62FFF1
+ 5B5BD09C038C50651C1170A533C51997ACA8792576CBA6F99D30D679F3FCDBDA3C3B15
+ AE4B6FDC70F0D29CE0F5B99B954501609A2F2CF55ABC4932D2C00814BFE7E55276942A
+ 5631976A0F7EEDB3BABD2A6E29CE0E35B100F910F2E0482BF1DED0C1A49EBE6E397170
+ 2C3473F73E5611DD69B46CA9C8D94BF1EC5292995CF3BE24E40C1DE6F97FF77782F92C
+ CD673B1C9748DE885576B72AB24048F83C4FC055584F8B0A0F2645A04C82696D197C4B
+ CA22C71B786019D5D37C320D505456BF4CC0D88F4B73FAE37BDE4CABFD30AE4BFFD267
+ 3E479BEDB1F4366379C3D88474CB6F7E7BE68BF5660A14438ACD240AF84CF41DD80F0C
+ EC65D5323444F870C6E2ED37C2B7926757BEBF00C59668F4DEE86CA0FB90F388719A96
+ 77D9357E537F6DA34A4ED4BC41EF0F9105FDB077CB77AB99EE9C946B25559B4759117F
+ 5F2E8A23EFACC7CD5B61B872F4BECDF003A89CAD32B59C10AE08AD67B147D05B68794D
+ 85#)(e #010001#)(d #156872D2A37EB5D8A86A4448E5D261C2223CCEFD309B127917
+ 9DF4CD246D79CC8F7BA5012A03E508B8FE406469D1297886740C264BD056B470AC9258
+ 4D909D4C74F4CEFB7505A3B96D9D3DC8527DE830DBFC18B8FA389C3C3C06CD29C85700
+ 68DA999205B61FE8F44B9202BABD6718F826773CCE510F08D2011E4A11BC66B19A3327
+ BEA64E4CF6664EB50484A222D6E4A24BDB4F13F1D17530538C86C486E7E60DE9D48F1A
+ F4D3BF4EB06A183C8AD7AD080D588C4273CBACEF381DF193343B51127A7FEB1360D1BF
+ ACEB2DB3F4C08E892F2F39A5EB90059430C5E4802DC80206764AA2661B921FC138CD35
+ E61C61052740F7FBA3E9033D502E87075B9FDBE1E8B89F4077DA785A9AF211FF466FD8
+ 85BC29844AAA8519D45BB5A41B5B5DE2EB3229D3D291F6CD18B74272597ADAF2710D0B
+ 19874B37AE3AC04C432DEB70DE5478213BB6A41396839020AB83E6A920970AD44C04BA
+ 69FF14F9123D21A43235D068104CDF142CA52E64915C74777C8813DE708AA3673A6BD9
+ 75956603E3ADDF33ABC4D9289208960272FC26656D619D2EDCFA65690AE8F9539B54E5
+ 2F394F4602E53A31C45556C6449D75F1400AFCF5A46D405F559F9679A32C378DA1F7D3
+ 8491180972EDD8D1D02894EFB86FF8966731522BFC34217ED525DD8BEA717CC74FEC8D
+ 7C8AE814A281FF016CF84895D1C64680CFD7B583DCC0429BFC90C5A645A8D0A1#)(p
+ #00C5DC11B26A0B58F744E80327F7BB1D47B0F3135669DC73467A584D4C68F37FA832
+ 3ADBF6B823F95DCB85BC1578365F8A00693A8DADF0FBFD6267B144B15DF5DFA573C86C
+ 9D28F9F08FC52536E692AD961B125E845B5D86B421F8CC472480262EEC029A9A8A34D1
+ B2DFC49FF2B1BCE3E9FF9F2663B7CF044994245770F3E8DFC5846CA7CCE7E1AA4C4116
+ 6D3D4B7E60D14895425CE9213837CAC049F0C026F187FF8F1E85B08180F35E39710EE4
+ 704E110D85D868D6AB57DC7B52E49688575C7C2D2AFC50112CD98D9CF87D47013EB3D5
+ 812331D1A19404D823879FED554736376F54E03FED523D5C36D078FBFBDA35AC6A20F9
+ 67FD3CCD10315F803EAFC08D51#)(q #00F04ACEEA544678ED5D95DB20AD8ABE92F409
+ A8E7D66E9AB3AC1C38DAFB779266E02CC691F42FE566C5434B773C3F31DD6538993197
+ D70DCFCAA5ACC3F7609155D3EFD9B11D659E0D74088A0A7CA82E34CCBCC63D52663883
+ 2995D610979F9377B37B0C4B01C17498DF297D25F87E9A99F7E52DEA579441AF93AD5B
+ D4F91CEA3D2976C939510B12DD8379E97D8A3C3E21C17B306427B9C4BA73AE47F9E4D8
+ F77D040640E6EFFDC008115FC13B272BE31B15AFCCD4FC00A4A23E41A83DA792E577F0
+ DCCF1428616F6827AF1A4683482B8062D33DB385C1354A49FE067F2746E0863E6B6FAC
+ ECCB32A868097D903CDEC7009187C35B89A2BDFD2696DBA860715FF5#)(u
+ #00B7F6B546666EE285F19AF7185C4784CB30658C56E734C5FA79761724A1557FDDC3
+ CC4A90445D4E129AF9B6F27026DA18711B742638E917567DBF9BED2380FD0D45A0D672
+ 1488AB1B8810812B2E99017681F57ED7C3ED4E1E1CB13B2068EC517E40B511FE75BC88
+ 04AB678230B0C1C3A92E785A1BA395948732D6386D1D422C928DE1806B86F54ACE3A80
+ 5D0AEE476D13DFE0010BD6233312E481133A96DC6BCD25EDCDB75548C93AC22C1BC911
+ 9C2361CB5A030CEE414D23B727A4AF9A05CFB08EE311D6D561F277E351307AB1CC85FA
+ 6BDD845738EB6C1E372E18BA8C3198BA078D3B307C29C857057367149B233D20038A11
+ 80A60936EDF97E30EE2F4D5386#)))
--- /dev/null
+Created: 20260302T170556
+Key: (private-key (rsa (n #00E9A0B1AD5A4C1D3D067EE14FF75681AE4F1C09BE8D
+ 7934551697F87020527905B106987DD423215F77E203B653D58F8E450698BBA87CE9BA
+ 2A861826972804C1233D0373C4C696D61C82A94762D62F800C99FF68BDACFF5D45F0B4
+ 3484F6AF8A4EA1342BD2D09BB73EF3AE37C4881E5C1887AF016AC3518D843CB1292A87
+ 55CB94ACE360EC2D9B860C51D5A9F83BA91D26CC2A2F232584D27F4A8BFA6035D06EC8
+ 253B930748BAA1D388FD63509DB8F7CCDA64B4F396DBABA2B595E3FF694B032631B7CD
+ CA0D3114BDCC2520EAE02028FC3E5D7BBF2EAFA6EE2D09D08904D26331736578B229D5
+ 8083F25B988F28CAEED44FA46711ED70685AC5F96079DC14BD1AC21537CC5A7A1729C4
+ 402FB96739C77FE4C1B1D0D9E9A99168678F744BAF85A3632F06B4263DE55B66A3E60D
+ 264E344257A531C7CD4B9247817AF2FBC84ABDEF00C2038CA9DF1B9C4A3472AF58DC02
+ 1002E2047806BC69912922DA8C35859D04282DAECBB9623F6DF207E46D54F63246C5DB
+ 7DCFEE4BB873E148CB42AF5D7A5F1AC444CAE7469274AD5D5E19740BD8407FCCCBE509
+ C7DBAFB3C17C405E51422F78A807CCFDF3E0D2521377C4BC487CB56BF3D95A233B621D
+ F4814668E0D71ED6474AC1D752152C9EA47B2157E7C37415F97E855DAD788B5F6D44FF
+ 2517140FE037B0147FA9BC1A94F0534EAEEA22D9238DE4AD5189A7ABCC61BF0144DA5D
+ A3#)(e #010001#)(d #07B24A882A745D7638338FDAA18C51035C09D16C5C9EC49195
+ 07F6A04300548A5275A42A6905AB40C8E3423A0C72F9A2B7356B6CAB354A41DECAC21A
+ EB59DF2639B1F5DE277A5F57B862B98EE77BA4DEF40B52B5B1A1F45BAF4529BA9D32BF
+ 3FB02D71598C3D6113DD580BC23C903B67CF4B1101DBF1894B3F32FCA71D868DD60214
+ DBFCC26B12378D4A58DE9B95E3915948DA8EE8FA8070AACEDAE3A9ADBC2B1A1ED7E295
+ 17D9462180DED019C4C86629727C64D5AD7F991CE81C83015407AB97E385699B216A1F
+ 83CD28DFF7BCE0725934F8C16DDFECDB73F739DE8BD503D54EB8BD7C076A87650F73B9
+ 7EC22096E6DD49AE61D2DE5E98A17CEA253A7E7C945A1F86A6CB7D7C64EB42284A995E
+ 594F51A3A142CA240D8558ABC95D7455659D0C3A5A6BF0DCD960ED585B9739DB2C3332
+ 141344B707FAE19C2C8498BF0B1F942A723920A69C878F863E11C977383F6DD6984AAA
+ DD336525CE758898ADF7695A6F2C0271A46BE1FF511C1A680C40A4B41916B42E46072A
+ 18DD78D53F75962816E3F1E1CE5128EE32CB7A517662553FDAE65812C082A41332CB6A
+ 245681DACCD7280C25315B871688FD887BCBD9F00905C2491A229194728F0A8D4A8761
+ 638D3AD8CB9F94F0D4FAC433293E2EA5F627B7BBBAF07CC0F996E02D99D96AAE4D648F
+ DED56D2E099E22E0C951CC12003519FC14048BAC0F4D63EC5D5F1C401E648269#)(p
+ #00EA4F2114BF4B90840FCB273263999FBFF30D49627FB5F8825A897AC3139F59B78B
+ 869335FE074BC43CF5E7C75F4E31A257DF93AB67DA3B68BCA37F7EF68372D3A661FBF3
+ D720419FD301AE4FACAB248227A8C47D97B6D283540A9A666530F1F9D5BA0CC97FD5EE
+ C219DA21D510BA4D2D604B18ECE111269D18D7E8B495012AFB6966496EE3DA0AC8F98F
+ B11A0D68C24DA486CD386B14A8760CE8332C2694A5172DC3D008B849725B70C5EDF116
+ 4EE97F095CC2382827E0B122177C6667390020AAAC528B9363D3680745B4BA70394A46
+ 14520BA4F67AD5935880C1CDADC1EA53D4467A600C8645441ED6FE6C2A0474A15A0E2A
+ B19D9131E62469C83C48D59C87#)(q #00FF416AAC1AE5E6533B487A02F2CCEDA9C3BF
+ 4AF70CFAB7F41620F752A37298A0B2CA271AAAE19D603B935DAA8AEFB37863BCCCC6F6
+ 37D8999678DDC74D422938E5174B78AD7403AFFB5E933C25B1141863E3DDD59FE564B7
+ AF9EF1029C650EBC2359A92D860BB76890C0CDF8C130E5E0C29345D46067BE102468FA
+ 8E19FBC85DFE0838E2980D6D9ED537E27D3943965BFC7E9E838A7D06DE270313DE3F56
+ CFA0685AEFC521B20229F3EDEE3B2E7FFDE75801DD20389EBB63A92DA3AF0B9FB415C3
+ 712FDFE514D7448A64A9B8590F9F7DFD8AF71F4F8F9DA91E8448CAD09C160528D6C42C
+ D36647E44F9CAA29BFB28D7868C9A26F13F62E2ECBB8B0C8B3D9F905#)(u
+ #00D4A453B0BCC55A6FC0E7D9682B5569AA22CEFC3A2ACAC2635EAB544365C36B34AA
+ 0D142C21BB5234EE20E5BE3E1BB8D3932DD95818277D4DDB683757F60846A2F16965A1
+ ED5C1D9EA8210F68EF8552ACD9F3B63ACEB727DB95FA0E001DC924A3F5D9C299432EC3
+ 8328B4608583605DA61A046DC9986D3D23FF682313810C94A342BA654D185CC0E06473
+ F353152D8BB877E84FBBB754F82F06DD06ACAA3996AE8359D3CD26B95BC43F61ECB428
+ 57CEC8CA7E99CAAC884167BC948820C9BB2EF178F1A661B05A58288A2E6E47CE8EDBC5
+ 0637D59EB9FD90B5F673B5372D4419F57651FE9BE71A370D30FA822DE2B3C7D9DA5097
+ 83A7A6BBDBD7A4CD0891541BBD#)))
--- /dev/null
+.less-history-file:
--- /dev/null
+/.data/nfs/repos/Mikrotiks/ros.vados.ru.git/config 3;23;52
+/var/www/ros.vados.ru/Mikrotiks/backups/.git/config 2;35;35
+/.data/nfs/repos/Mikrotiks/backups.git/config 1;0;0
+/var/www/ros.vados.ru/.git/config 6;0;92
+/var/www/ros.vados.ru/Mikrotiks/.gitconfig 1;0;0
+/www/ros.vados.ru/Mikrotiks/.gnupg/gpg-agent.conf 3;0;50
+/www/ros.vados.ru/.git/config 2;35;35
+/var/www/ros.vados.ru/Mikrotiks/gpg_vados-dev.asc 107;0;6687
+/var/www/ros.vados.ru/Mikrotiks/.ssh/authorized_keys 6;0;2699
+/var/www/ros.vados.ru/Mikrotiks/.bashrc 122;1;3857
+/var/www/ros.vados.ru/Mikrotiks/.gnupg/gpg-agent.conf 2;22;40
+/var/www/ros.vados.ru/Mikrotiks/.bin/ros-diff.sh 407;1;10786
+/var/www/ros.vados.ru/Mikrotiks/.bin/test.sh 13;22;257
+/var/www/ros.vados.ru/.git/COMMIT_EDITMSG 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/.gitignore 8;10;72
+/var/www/ros.vados.ru/Mikrotiks/.bin/logs/ros-diff.log 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/.bin/logs/MikroNUC.log 56;0;3896
+/var/www/ros.vados.ru/Mikrotiks/.bin/bash-progress-indicator/spinner.sh 79;1;1572
+/var/www/ros.vados.ru/Mikrotiks/.bin/logs/MikroYellow.log 467;0;36840
+/var/www/ros.vados.ru/Mikrotiks/.bin/logs/MikroMaster.log 458;0;38628
+/var/www/ros.vados.ru/html/ros-deploy/ROSdeploy 85;0;2797
+/var/www/ros.vados.ru/html/ros-deploy/ros-deploy.sh 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/.bin/ros-conf/sync-script.sh 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/.bin/ros-conf/setup-ssh-keys.sh 6;21;119
+/var/www/ros.vados.ru/Mikrotiks/backups/.git/hooks/pre-commit.sample 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/backups/.git/hooks/pre-push.sample 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/backups/.gitignore 2;0;5
+/var/www/ros.vados.ru/Mikrotiks/.bak/.git/config 2;35;35
+/var/www/ros.vados.ru/Mikrotiks/.profile 23;0;675
+/var/www/ros.vados.ru/Mikrotiks/.ssh/id_rsa.mikro_bak.amster-nuc.pub 1;395;395
+/var/www/ros.vados.ru/Mikrotiks/.ssh/id_rsa.pub 1;397;397
+/var/www/ros.vados.ru/Mikrotiks/.ssh/id_rsa.mikro_bak.pub 1;384;384
+/var/www/ros.vados.ru/Mikrotiks/.ssh/known_hosts 5;0;2002
+/var/www/ros.vados.ru/Mikrotiks/.ssh/id_rsa 28;0;1831
+/var/www/ros.vados.ru/Mikrotiks/.ssh/git@amster-nuc_rsa 50;0;3381
+/var/www/ros.vados.ru/Mikrotiks/.ssh/git@amster-nuc_rsa.pub 2;0;740
+/var/www/ros.vados.ru/Mikrotiks/oxidized/run.sh 13;34;371
+/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/20260222/20260222002006-Config.rsc 160;18;7841
+/tmp/crontab.JDTt67 2;0;62
+/var/www/ros.vados.ru/Mikrotiks/.bin/get_backups.diff 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/.config/.mikrotiks 4;0;141
+/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/history/20260220021857/ConfExportDiff.rsc 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/.bin/scripts/mktmpfs.rsc 2;18;33
+/var/www/ros.vados.ru/html/AM-GlobalFunc.rsc 1023;6;39628
+/var/www/ros.vados.ru/html/routeros-mkdir/create_mkdir_function.rsc 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/.bin/ros-deploy/README.md 167;0;6781
+/var/www/ros.vados.ru/Mikrotiks/.bin/ros-deploy/ros-deploy.sh 65;0;1923
+/var/www/ros.vados.ru/Mikrotiks/.bin/ros-deploy.sh 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/.mikrotiks 1;20;20
+/var/www/ros.vados.ru/Mikrotiks/backups/tmp/log.txt 1;0;0
+/var/www/ros.vados.ru/html/routeros-config/setup-ssh-keys.sh 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/.bin/log.txt 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/.bin/MikroNUC-config-export-current.rsc 2;0;42
+/var/www/ros.vados.ru/Mikrotiks/.bin/tmp/log.txt 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/.bin/MikroMaster-config-export-current.rsc 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/.bin/get_backups.sh 64;40;2017
+/var/www/ros.vados.ru/Mikrotiks/backups/10.30.30.81/18-02-2026.log.txt 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/backups/10.30.30.10/18-02-2026.log.txt 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/.ssh/mikro_bak_rsa@10.30.30.81.pub 1;402;402
+/var/www/ros.vados.ru/Mikrotiks/.ssh/@10.30.30.81.pub 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/.ssh/mikro_bak_rsa.pub 1;745;745
+/home/vados/.gitconfig 1;0;0
+/home/vados/.bashrc 97;0;2958
+/home/runner/.ssh/authorized_keys 1;742;742
+/home/Mikrotiks/.ssh/mikro_bak_rsa.pub 1;397;397
+/var/www/ros.vados.ru/Mikrotiks/.ssh/MikroNUC_rsa_pub.pem 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/.ssh/MikroNUC_rsa.pem 1;0;0
+/var/www/ros.vados.ru/Mikrotiks/.bash_history 1;0;0
--- /dev/null
+[input-def]
+0=*
+
+[input-1]
+0=/var/www/ros.vados.ru/Mikrotiks/.bin/logs
+
+[input-2]
+0=/var/log/Mikrotiks
+
+[inpmc.fm.mkdir]
+0=10.30.30.81
+1=tmp
+2=scripts
+3=.bak
+4=oxidized
+5=.ssh
+6=test
+
+[name]
+0=
+
+[ignoredirs]
+0=
+
+[start]
+0=
+1=.
+
+[mc.shared.search]
+0=set MkD
+1=carkee
+2=vers
+3=version
+4=version=
+5=GIT_PROTOCOL
+
+[save-as]
+0=/var/www/ros.vados.ru/Mikrotiks/.bin/ros-diff.sh
+
+[cmdline]
+0=chmod +x get_backups.sh
+1=git clone https://github.com/tarikin/ros-deploy.git
+2=vigr
+3=passwd mikro_bak
+4=git config --global amster-dev
+5=git config --global init.defaultBranch main
+6=git config core.repositoryformatversion 0
+7=git config core.filemode true
+8=ls -la .
+9=ping vados-nuc
+10=git remote add origin git@vados-nuc:/d/.bak/Mikrotiks/ba
+11=git add .
+12=git fetch origin
+13=cd ~
+14=main.sh spinner 1
+15=1
+16=`
+17=git init
+18=cat config
+19=
+
+[Dir Hist New Right Panel]
+0=/var/www/ros.vados.ru/html/routeros-config
+1=/var/www/ros.vados.ru/html/routeros-mkdir
+2=/var/www/ros.vados.ru/Mikrotiks/.bin/ros-deploy/.git
+3=/var/www/ros.vados.ru/Mikrotiks/.bin/ros-deploy
+4=/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/20260220013655
+5=/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/20260219204655/history
+6=/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/20260219204655
+7=/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/20260219204148
+8=/var/log/Mikrotiks
+9=/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/history/20260220021857
+10=/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/history/20260220021234
+11=/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/20260220021857
+12=/var/www/ros.vados.ru/Mikrotiks/backups/MikroMaster\r/20260220023629
+13=/var/www/ros.vados.ru/Mikrotiks/backups/MikroMaster\r/history/20260220023629
+14=/var/www/ros.vados.ru/Mikrotiks/backups/MikroMaster\r/history
+15=/var/www/ros.vados.ru/Mikrotiks/backups/MikroMaster\r/tmp
+16=/var/www/ros.vados.ru/Mikrotiks/backups/MikroMaster\r
+17=/var/www/ros.vados.ru/Mikrotiks/backups/MikroMaster/20260220035103
+18=/var/www/ros.vados.ru/Mikrotiks/backups/MikroMaster/history/20260220035103
+19=/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/20260220035049
+20=/var/www/ros.vados.ru/Mikrotiks/backups/history
+21=/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/history/20260220
+22=/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/history
+23=/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/20260220
+24=/var/www/ros.vados.ru/Mikrotiks/backups/MikroMaster/20260220
+25=/var/www/ros.vados.ru/Mikrotiks/backups/MikroMaster/history/20260220
+26=/var/www/ros.vados.ru/Mikrotiks/backups/MikroMaster/history
+27=/var/www/ros.vados.ru/html/.bak
+28=/var/www/ros.vados.ru/Mikrotiks/.config
+29=/var/www/ros.vados.ru/Mikrotiks/.bin
+30=/var/www/ros.vados.ru/Mikrotiks/.bak
+31=/var/www/ros.vados.ru/Mikrotiks/.ssh
+32=/opt/docker/carkeeperbot
+33=/opt/docker/oxidized
+34=/opt/docker
+35=/opt
+36=/www/ros.vados.ru/Mikrotiks/.bak
+37=/www/ros.vados.ru/Mikrotiks
+38=/
+39=/var/www/ros.vados.ru/html/ros-deploy
+40=/var/www/ros.vados.ru/html
+41=/var
+42=/var/log
+43=/var/www/ros.vados.ru/.vscode
+44=/var/www
+45=/var/www/ros.vados.ru/Mikrotiks/backups/MikroYellow/20260228
+46=/var/www/ros.vados.ru/Mikrotiks/backups/MikroYellow/history/20260228
+47=/var/www/ros.vados.ru/Mikrotiks/backups/MikroYellow/history
+48=/var/www/ros.vados.ru/Mikrotiks/backups/MikroYellow/tmp
+49=/var/www/ros.vados.ru/Mikrotiks/backups/MikroMaster/tmp
+50=/var/www/ros.vados.ru/Mikrotiks/backups/MikroMaster
+51=/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/20260228
+52=/var/www/ros.vados.ru/Mikrotiks/backups/MikroYellow
+53=/var/www/ros.vados.ru/Mikrotiks/backups
+54=/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/tmp
+55=/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC
+56=/var/www/ros.vados.ru
+57=/www/ros.vados.ru
+58=/www
+59=/var/www/ros.vados.ru/Mikrotiks
+
+[Dir Hist New Left Panel]
+0=/var/www/ros.vados.ru/Mikrotiks/.ssh/10.30.30.81
+1=/var/www/ros.vados.ru/Mikrotiks/.bin/tmp
+2=/var/www/ros.vados.ru/Mikrotiks/.bin/ros-deploy
+3=/var/www/ros.vados.ru/Mikrotiks/.bin/v1.2.1.tar.gz/utar://ros-deploy-1.2.1
+4=/var/www/ros.vados.ru/Mikrotiks/.bin/v1.2.1.tar.gz/utar://
+5=/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/20260220035049
+6=/var/www/ros.vados.ru/Mikrotiks/.bak
+7=/var/www/ros.vados.ru/Mikrotiks/oxidized/oxidized-config
+8=/var/www/ros.vados.ru/Mikrotiks/oxidized/config
+9=/var/www/ros.vados.ru/Mikrotiks/oxidized
+10=/var/www/ros.vados.ru/Mikrotiks/backups/MikroMaster
+11=/var/www/ros.vados.ru/Mikrotiks/backups/.ssh
+12=/var/www/ros.vados.ru/Mikrotiks/backups/MikroYellow/history/20260220
+13=/var/www/ros.vados.ru/Mikrotiks/backups/MikroYellow/history
+14=/var/www/ros.vados.ru/Mikrotiks/test/backup_configs/MikroMaster/20260224
+15=/var/www/ros.vados.ru/Mikrotiks/test/backup_configs/MikroMaster/20260221
+16=/var/www/ros.vados.ru/Mikrotiks/backups/MikroYellow/20260220
+17=/var/www/ros.vados.ru/Mikrotiks/test/backup_configs/MikroMaster/20260220
+18=/var/www/ros.vados.ru/Mikrotiks/test/backup_configs/MikroMaster
+19=/var/www/ros.vados.ru/Mikrotiks/test/backup_configs
+20=/var/www/ros.vados.ru/Mikrotiks/test/backups/MikroMaster/20260220
+21=/var/www/ros.vados.ru/Mikrotiks/test/backups/MikroMaster/20260221
+22=/var/www/ros.vados.ru/Mikrotiks/test/backups/MikroMaster/20260224
+23=/var/www/ros.vados.ru/Mikrotiks/test/backups/MikroMaster/history
+24=/var/www/ros.vados.ru/Mikrotiks/test/backups/MikroMaster
+25=/var/www/ros.vados.ru/Mikrotiks/test/backups
+26=/var/www/ros.vados.ru/Mikrotiks/.config
+27=/var/www/ros.vados.ru/Mikrotiks/.local/share
+28=/var/www/ros.vados.ru/Mikrotiks/.local
+29=/var/www/ros.vados.ru/Mikrotiks/.ssh
+30=/var/www/ros.vados.ru/Mikrotiks/.cache
+31=/var/www/ros.vados.ru/Mikrotiks/backups/.git/hooks
+32=/var/www/ros.vados.ru/Mikrotiks/.bin/ros-conf
+33=/var/www/ros.vados.ru/html/ros-deploy
+34=/var/www/ros.vados.ru/html
+35=/var/www/ros.vados.ru/Mikrotiks/backups/MikroYellow/tmp
+36=/var/www/ros.vados.ru/Mikrotiks/backups/MikroYellow
+37=/var/www/ros.vados.ru/Mikrotiks/.bin/scripts
+38=/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/tmp
+39=/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC
+40=/var/www/ros.vados.ru/Mikrotiks/.bin/logs
+41=/var/www/ros.vados.ru/Mikrotiks/.bin/bash-progress-indicator
+42=/var/www/ros.vados.ru/Mikrotiks/upload
+43=/var/www/ros.vados.ru/Mikrotiks/test
+44=/var/www/ros.vados.ru/Mikrotiks/backups/.git
+45=/var/www/ros.vados.ru/.git
+46=/var/www
+47=/var/www/ros.vados.ru/Mikrotiks/backups
+48=/var/www/ros.vados.ru
+49=/var/www/ros.vados.ru/Mikrotiks/.gnupg
+50=/www/ros.vados.ru/.git
+51=/www/ros.vados.ru/Mikrotiks
+52=/www/ros.vados.ru/Mikrotiks/.gnupg
+53=/www/ros.vados.ru
+54=/var/www/ros.vados.ru/Mikrotiks
+55=/var/www/ros.vados.ru/Mikrotiks/.bin
+
+[input2]
+0=/var/www/ros.vados.ru/Mikrotiks/.bin/ros-conf/
+1=/var/www/ros.vados.ru/Mikrotiks/.ssh/
+2=/var/www/ros.vados.ru/Mikrotiks/.ssh/10.30.30.81
+3=id_rsa
+4=id_rsa.pub
+5=/var/www/ros.vados.ru/Mikrotiks/.bin/
+6=/var/www/ros.vados.ru/Mikrotiks/.bin/scripts/
+7=mktmpfs.rsc
+8=ROSdeploy
+9=/var/www/ros.vados.ru/Mikrotiks/.bin/ros-deploy/
+10=ros-diff.sh
+11=/var/www/ros.vados.ru/Mikrotiks/.bak
+12=mikro_bak_rsa@10.30.30.86.pub
+13=/var/www/ros.vados.ru/Mikrotiks/.config/
+14=git@amster-nuc_rsa
+15=git@amster-nuc_rsa.pub
+16=id_rsa.mikro_bak
+17=id_rsa.mikro_bak.pub
+18=id_rsa.mikro_bak.amster-nuc.pub
+19=id_rsa.mikro_bak.amster-nuc
+20=/var/www/ros.vados.ru/Mikrotiks/backups/.ssh
+21=/var/www/ros.vados.ru/Mikrotiks/.ssh
+22=/www/ros.vados.ru/Mikrotiks/.bak/
+23=test.sh
+24=/var/www/ros.vados.ru/Mikrotiks/
+25=/var/www/ros.vados.ru/Mikrotiks/backups/MikroNUC/
+26=/var/www/ros.vados.ru/
+27=Mikrotiks.git
--- /dev/null
+# ~/.profile: executed by the command interpreter for login shells.
+# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
+# exists.
+# see /usr/share/doc/bash/examples/startup-files for examples.
+# the files are located in the bash-doc package.
+
+# the default umask is set in /etc/profile; for setting the umask
+# for ssh logins, install and configure the libpam-umask package.
+#umask 022
+
+# if running bash
+if [ -n "$BASH_VERSION" ]; then
+ # include .bashrc if it exists
+ if [ -f "$HOME/.bashrc" ]; then
+ . "$HOME/.bashrc"
+ fi
+fi
+
+# set PATH so it includes user's private bin if it exists
+if [ -d "$HOME/bin" ] ; then
+ PATH="$HOME/bin:$PATH"
+fi
+
+if [ -d "$HOME/.bin" ] ; then
+ PATH="$HOME/.bin:$PATH"
+fi
+
+# set PATH so it includes user's private bin if it exists
+if [ -d "$HOME/.local/bin" ] ; then
+ PATH="$HOME/.local/bin:$PATH"
+fi
--- /dev/null
+{
+ "user.name": [
+ "vados-dev"
+ ],
+ "user.email": [
+ "vados@vados.ru"
+ ],
+ "color.ui": [
+ "auto"
+ ],
+ "safe.directory": [
+ "/var/www/ros.vados.ru/Mikrotiks"
+ ],
+ "init.defaultbranch": [
+ "android-9.0"
+ ],
+ "core.autocrlf": [
+ "false"
+ ]
+}
\ No newline at end of file
--- /dev/null
+# Generated by /usr/bin/select-editor
+SELECTED_EDITOR="/usr/bin/mcedit"
--- /dev/null
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCtYPqhMLWEhFjiZKUCWBVxoEtNRkZvCMjfJ+F2jqJl2SVVCay92wuItwjibkmVVlXMdokemr8oBTqvlL+tXghJbOselR00HPyvwdeMVE+EGxtOXGwSHDTYSaYDl7OkKhURnJ4N+cLrxuuljXT26L9btpayJzsyqy8i6hNbcgg0rLAcgFwrDW05cUgWOTtSD8OIzE0BRGCFNTYuEz6cI6e+XeqZa0RILhbEYjznRo5OYx7xyCYI2cYJm8PKpLSXWjZGHsej1e1wqBaxSoAUO4ja7AE1Dg3oIZ8ac9NeNk0Zgn9CLPZNb9qRYBgf1eTkpg+ll0IDUkzFY6LA7vA2WfiGPZkguurFczr1K9f1RtfWc2QDVvyXytnMzAHaGBC/zUpxvJBcL1vHzRwBREWUfcBNSP44QMkJ10adPupDmATZAVkaoqKEyIi2opN+obBUL1tRd8PlKV1B2mw5brqpZQuxAhbSTRVAnc5fOQjs6r/8q4pXRN7JRSgjwk/+7gLmQE0S7hJ82PkW1mLzdMxHbNqFouvFh6vTIGC0szuP8p3F6IChDPEy9p3FfffF6B4jqLHJXiANzszwG2aReLl6mivRmO6ZcyuahmekdqytzjihgtmYBO8wqU/kGvU38xtbI6OTKBXom2kGnEoNd4PlBNVXlsn1al2jyKzPKGI3xlA9FQ== git@amster-nuc
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC7lpAKxEKB3RexZlN1TNRnGOVmZi0fhM8DUiW+mKdcDtGBmAOHTHOuhFCofpDXyGLbeOT3FOTumPNbM3RLssY3t/GDxxaJUfQhbUbQJgEwHmlP2ianJ4hSqtoJhnu3jCn7y8LnEhd0I1nCYF4D/XUTodmglKR/FJujCRoqbYLuqNPozwUxMgCTb+OYpmaEhILE9hXD6qM06CMnOFtE2Xg+CaRRmsv7nuu8Z8kMp/239lUj9AnTgNMoI73wxL2HR4M+WzrCiiTRWExJWyIH+WTjrY40iQY6vYD+BKXN6B9bl03MxwdhlYYspItX/u2b80/V7oy0lpe4uC/ZdkWrpXdPaGFCdOehfn//jnPryguSF8aXBRsHVCOl0QB/yb84+JbS494Kkkr7g4S16qtxQ6JP52tMc+7SLEufZ67pdKyz9JpQLJyMpKTJtK0y9wMaqQoIn0/9Yb+W3XnAepr5zhxercdEw6dpFgJdKlnsqINDlJ3VU+b07uk1nt/fuIksS3v8gZkFvE8OV5lgTD6/gOPGGwBD73SyY/sVVwHEoMr3B+647nilfiiC/VOTfzk5VOv6R2apbYZCN2phI6YQvk6bhQGDrl61Lne2mXioCLbDW0rTRabdQrPOQTml+hM3WIudyvt7nKajQcaUnwIw3yBFNc77cGuHLrxjiaaZARntlw== git@github.com:vados-dev
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcieLidti9XSkOD3EkZyigI+GGLBhe8bBhPuXI0afyxnuagbMz3vY3tzyMaQ7iEi9NGgUE2BnPaxp/04DQ9/fcjwlCeuYUq0Kk7ZP4XtVSsYuDPDcx/pcLaIUum/G6bZpDA9Hmq5B3zPDbbgq0ujCIAAusV8jAqgVw7LZJM9NejpvMLd3VAw6HrwQIptIyp+5w+6hQd2VcOVjcdprFQnZeLS0DzfY7557bKLomxXncbyNVd8NqB3YT1+m+P5+3SyQe0K8FKnwiIWvh6L8CpL1f40Dke/BOoKg5N/1LO7kpZP27yVG7gqKW+d9/aE0xGa+uLUKcSHyEqtIJ+D/oAg8f mikro_bak@10.30.30.81
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcieLidti9XSkOD3EkZyigI+GGLBhe8bBhPuXI0afyxnuagbMz3vY3tzyMaQ7iEi9NGgUE2BnPaxp/04DQ9/fcjwlCeuYUq0Kk7ZP4XtVSsYuDPDcx/pcLaIUum/G6bZpDA9Hmq5B3zPDbbgq0ujCIAAusV8jAqgVw7LZJM9NejpvMLd3VAw6HrwQIptIyp+5w+6hQd2VcOVjcdprFQnZeLS0DzfY7557bKLomxXncbyNVd8NqB3YT1+m+P5+3SyQe0K8FKnwiIWvh6L8CpL1f40Dke/BOoKg5N/1LO7kpZP27yVG7gqKW+d9/aE0xGa+uLUKcSHyEqtIJ+D/oAg8f mikro_bak@10.30.30.10
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcieLidti9XSkOD3EkZyigI+GGLBhe8bBhPuXI0afyxnuagbMz3vY3tzyMaQ7iEi9NGgUE2BnPaxp/04DQ9/fcjwlCeuYUq0Kk7ZP4XtVSsYuDPDcx/pcLaIUum/G6bZpDA9Hmq5B3zPDbbgq0ujCIAAusV8jAqgVw7LZJM9NejpvMLd3VAw6HrwQIptIyp+5w+6hQd2VcOVjcdprFQnZeLS0DzfY7557bKLomxXncbyNVd8NqB3YT1+m+P5+3SyQe0K8FKnwiIWvh6L8CpL1f40Dke/BOoKg5N/1LO7kpZP27yVG7gqKW+d9/aE0xGa+uLUKcSHyEqtIJ+D/oAg8f mikro_bak@10.30.30.86
--- /dev/null
+-----BEGIN OPENSSH PRIVATE KEY-----
+b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
+NhAAAAAwEAAQAAAQEAnIni4nbYvV0pDg9xJGcooCPhhiwYXvGwYT7lyNGn8sZ7moGzM972
+N7c8jGkO4hIvTRoFBNgZz2saf9OA0Pf33I8JQnrmFKtCpO2T+F7VUrGLgzw3Mf6XC2iFLp
+vxum2aQwPR5quQd8zw224KtLowiAALrFfIwKoFcOy2STPTXo6bzC3d1QMOh68ECKbSMqfu
+cPuoUHdlXDlY3HaaxUJ2Xi0tA832O+ee2yi6JsV53G8jVXfDagd2E9fpvj+ft0skHtCvBS
+p8IiFr4ei/AqS9X+NA5HvwTqCoOTf9Szu5KWT9u8lRu4Kilvnff2hNMRmvri1CnEh8hKrS
+Cfg/6AIPHwAAA9B2kgn4dpIJ+AAAAAdzc2gtcnNhAAABAQCcieLidti9XSkOD3EkZyigI+
+GGLBhe8bBhPuXI0afyxnuagbMz3vY3tzyMaQ7iEi9NGgUE2BnPaxp/04DQ9/fcjwlCeuYU
+q0Kk7ZP4XtVSsYuDPDcx/pcLaIUum/G6bZpDA9Hmq5B3zPDbbgq0ujCIAAusV8jAqgVw7L
+ZJM9NejpvMLd3VAw6HrwQIptIyp+5w+6hQd2VcOVjcdprFQnZeLS0DzfY7557bKLomxXnc
+byNVd8NqB3YT1+m+P5+3SyQe0K8FKnwiIWvh6L8CpL1f40Dke/BOoKg5N/1LO7kpZP27yV
+G7gqKW+d9/aE0xGa+uLUKcSHyEqtIJ+D/oAg8fAAAAAwEAAQAAAQA4aum+vR64gQ7+5knc
+2OEndkcd2F6gOXNcWRLwIb/qG+cIdJ5ln4IV6pCD+olGqU8q9qnAaTJEM1HFqDDRH83RTC
+wGLc0mveKzFn0yEtvHhf3GOrmZ5ywBDJaTidjBXCcw5/uKq2LSCqb0LuDk6gX7vih24NyV
+s7FqVaYNFASmGyc/hFObYC9wyJ/Shntb5ofI6tNpZDFTZCjct9XccdSYAjCz8YNVVCzy3i
+s7TKhSGeLR6cLNFDh55/XS4otvG4ZPTd1RfEHf54buwqu4TMghoDWVmSHgtsSmgNWsQaU3
+WGNw+BxKqV8IPdjCBFXd7XN8XknuJtGzGMUn95BrWpGhAAAAgCSXDG+5lQqmKXUlLG25OR
+Y3QVrN0it8moXO/3v1kf3gsRj0JMqobJI7h5t81+XCdk4ZFiXTIombHR1JlYVRCJOtvwxV
+ZDl+0wXJP9fgxOKdijKnCkU0lcPDOF2QOXGawNRddl+rCDM5XmhSdGPLlcxs6ulMTcRy4j
+dqEOON6UfOAAAAgQDTfbnTGZMsE3VU9DwEDnEHPHehdyhHh2e2DB26+xGo+9o9HhGOyxVZ
+P6E1NbLOgqc9KfWNJJD7YX9VVgwdQySoZNXDmXVfo4R3oJeSvU12iaghhQldbs12Dlv5L7
+nk8J0XnfXNMZ2YpSsoSRTjwnGzzlEHzZRZwJ/riEAXWbEDwwAAAIEAvXuLjH2/c0lC/41k
+BZByV/j2sS5JD52zdaFjYYrmAcctKzmDcilWYy9JSOzTVae0rwbpjtqx2y12zLw3K2H/JY
+2gyCNruLGq+EMe20FNu/6AlS/cGc/+fay6rPS2qRMiCwnjgFjB8qV/G8r4wwTAgaRygo1R
+rrtukQGlgyz03XUAAAAVbWlrcm9fYmFrQDEwLjMwLjMwLjgxAQIDBAUG
+-----END OPENSSH PRIVATE KEY-----
--- /dev/null
+-----BEGIN OPENSSH PRIVATE KEY-----
+b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
+NhAAAAAwEAAQAAAQEAssaL3TkpCKyHvHcy3D4O/0dTNx2AC7zo//qVV0wR1DZ3Na15EU/u
+hAl1RxuXjTROze4a2AfOH7dDIaS6CEIGUEPWbWb6Y35ONXhYGBFDE670Q/JhxwRJxPdh3L
+ar1lpGq/uSYV5T5/nAlFJqZeD7YumxI8wM7gD+lv2FmN+Trst/cNi8iXFfsE5t2CR2ayl1
+ZdILdzG/DkRlwSjH1cHTViGh7Ep6nfGDESsmh7xhiynimVzTEae29R6igERx98tVAh+D1R
+b+X4VMU4sAbrVGL9YV8eMFaXSv9gzYhU92DNRrBkKo9Ji3oSr3bBRTwNCmFUH8IYXMTi6s
+oAKglWtXZwAAA8itSy5trUsubQAAAAdzc2gtcnNhAAABAQCyxovdOSkIrIe8dzLcPg7/R1
+M3HYALvOj/+pVXTBHUNnc1rXkRT+6ECXVHG5eNNE7N7hrYB84ft0MhpLoIQgZQQ9ZtZvpj
+fk41eFgYEUMTrvRD8mHHBEnE92HctqvWWkar+5JhXlPn+cCUUmpl4Pti6bEjzAzuAP6W/Y
+WY35Ouy39w2LyJcV+wTm3YJHZrKXVl0gt3Mb8ORGXBKMfVwdNWIaHsSnqd8YMRKyaHvGGL
+KeKZXNMRp7b1HqKARHH3y1UCH4PVFv5fhUxTiwButUYv1hXx4wVpdK/2DNiFT3YM1GsGQq
+j0mLehKvdsFFPA0KYVQfwhhcxOLqygAqCVa1dnAAAAAwEAAQAAAQAS/y4Vj+FgXpT93dy1
+spJ9ZeLd1HCqzqQjr0j3QcoTNsZsGcbnpArAVRD1QWVVR92n3ElV815f2GV1yb9K6VkqZk
+r+zRaGRAGjhOo3hH4QNWMXZUYmk7oTCAaKIY8Y8/bWh6ECX7eiytM/75IGyWVtGVANcb1d
+/RUQjlgH6poS1Ld6Va2MemVgS60tZKIPOyLa4B93HlzRE7FXb0m1A1yohaXmi3ZGqjhnil
+Fu7MPR8IsLiHYEgLUvKMzFW2U6qRiLPZFoqE/YzvPchK5F4Bv60Cr0UbISeU2mXemkGxI/
+FEvODMV74vkJZJpY1SJ/qLe9uI04M+MLnjfFI6Db4HnBAAAAgEoHpbq4+vvO5oCBQvm1ek
+Hnb3K2xQ7c3b3fontYv+YN4wDaw0KYjWPFSjqJSjTcs3UR0HfZCfDjWoDGxJIz4S93EHgs
+jnnclUc6XjUhc9toYVyYhrt93kTkbLy2CrBUSujfrh0y73oq63v/jB/YF//hVXaCI2Bmca
+MTxt+QxJ8lAAAAgQDYAnFm8bzOWwIR/9NhRyZS+6KfsO5xXNs4toHCoQHHhcmW3cT0OIU3
+WmkDtIMKASZxAVPfsMze/kvfND8A/4zhTeerkt0wC3/clxE0LobMJ/z4zVWaWvnooTVIQ6
+jMZR6IZ5niXQxU1BU7P4mHH5F7oyvKpsKugzhxgCkwuZI1KQAAAIEA099vuFNVN2RCAv4K
+On6LzoblX3NpPiCOSeTW6f4C44dTivniuCpLPttFjkRdj3Zxirw5tixoYgqZ3Db89v8Rx8
+yyTouu+tc6DYgb4etAM1fVX3DX4WtJOJDZ6ndLjqraGTutytT+wCjHXwsuxpJsn7IKBxqO
+WyCkDpgm2sbFqg8AAAAQbWlrcm9fYmFrQGFtc3RlcgECAw==
+-----END OPENSSH PRIVATE KEY-----
--- /dev/null
+-----BEGIN OPENSSH PRIVATE KEY-----
+b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
+NhAAAAAwEAAQAAAQEAjNqkHXDEE1ixdxV6Xac9G+NqWDtgH3tYam2TwYvqIMCaEy3Vx4Ft
+q8EBu292RUZoruqkdb2A5CTmvZse19dUDBSy0eTuznIdi8en2V30QVHMCDs4Hrz/6300Ji
+lnGszmLzcSdLGE4i8wBkrk5cm4hlaetQyWJ7b444CGWkZE62uxHTOR5ItKJr/BaVHbi5BK
+dk/ZCiHOLNL6aJlSuzcekINXq6gGShutWiu26LFA+DsBj+T0SGv1+vz8RK714Iqa/vkbeb
+bSCWTxmEy3WGlN7TJUR7W/RYZidqby2wMaDsfD4nlpKHt+b+5OxclvIz5eA1+qKcmLg86m
+4p/LmjZkwwAAA8gFbfDUBW3w1AAAAAdzc2gtcnNhAAABAQCM2qQdcMQTWLF3FXpdpz0b42
+pYO2Afe1hqbZPBi+ogwJoTLdXHgW2rwQG7b3ZFRmiu6qR1vYDkJOa9mx7X11QMFLLR5O7O
+ch2Lx6fZXfRBUcwIOzgevP/rfTQmKWcazOYvNxJ0sYTiLzAGSuTlybiGVp61DJYntvjjgI
+ZaRkTra7EdM5Hki0omv8FpUduLkEp2T9kKIc4s0vpomVK7Nx6Qg1erqAZKG61aK7bosUD4
+OwGP5PRIa/X6/PxErvXgipr++Rt5ttIJZPGYTLdYaU3tMlRHtb9FhmJ2pvLbAxoOx8PieW
+koe35v7k7FyW8jPl4DX6opyYuDzqbin8uaNmTDAAAAAwEAAQAAAP8O2wB0GnCTmccdyCYf
+uoO3bUTKCXkZ2Oh6URREVX1b9vRJEYx6fiwS8Ug9fIP8ynBAAn9V66asaTfsx295VDyJCa
+XSfVKyc1aqZ2RMiJw6R2Y9eAFzPHvBWnMlkzhMm0+rqyNHK3HYaSGniD6b/ap4gKo8bhdo
+GOQnGmcRHlgmfA0iE0nAa2GbLRDCiGJf4nAY9pY5nVkKhiBPA2aRrDySB/9unqJrD0s0Vg
+Uvdonz/y9l06s0sjW88JrDOES6rFkdRO3q9tINQ1eWphiX3RTuY2P6zbbHaZ/ZJq4Mo2Lk
+OAJb/nKTA8sHK2Uz4UqWqgfYh0Iocp9GTkkIgvqZ0JkAAACAKMzcmjHcBTZWytRhwgTMyJ
+oTd55DoWbMiOQSbMbQ7zm39Hf5SN5B3Cyo8P5g3XEx/mqCouh3Gfp+ok3Lkn2vQEZ8rK3q
+Rmge18T0KPQ2U9DFVSLurSOKV5+TrhcaQc/NvPAMpJONwF3HPESejSEH1Esu6hFp5LyrLe
+yoBVKAnmEAAACBAMGD0RR8GGsiQ0u+5leUm1WOCzunT/+TcrYia7Qc7Xan6uNdTMYJjPQE
+TEkNQALsg3AfkUM83EiWOz40oERFL4JZRZHiI8K2G4CEunJaUt3mm/QpmxwstVdYuMVtzn
+SadKMhfuKOz9SJvbBz69phx+ZT7zsqc+O3Xv27rxekmRbfAAAAgQC6VdBGKNnoQZKJPHOh
+Sb3YohgzTfJNH1Uy5gpzK9A9Tlotit9cVmuHbFiO1twnIxUScDadxbskiUM8JK+VpWPYSo
+O3OcTyuspye/QTSlJofWPq2eSnDiKNYm3pJ9GzZRsuPDU+16guO+DAt40LknoUCPQvmdL/
+w6M9pB/+vq5inQAAAA5naXRAYW1zdGVyLW51YwECAwQFBg==
+-----END OPENSSH PRIVATE KEY-----
--- /dev/null
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCM2qQdcMQTWLF3FXpdpz0b42pYO2Afe1hqbZPBi+ogwJoTLdXHgW2rwQG7b3ZFRmiu6qR1vYDkJOa9mx7X11QMFLLR5O7Och2Lx6fZXfRBUcwIOzgevP/rfTQmKWcazOYvNxJ0sYTiLzAGSuTlybiGVp61DJYntvjjgIZaRkTra7EdM5Hki0omv8FpUduLkEp2T9kKIc4s0vpomVK7Nx6Qg1erqAZKG61aK7bosUD4OwGP5PRIa/X6/PxErvXgipr++Rt5ttIJZPGYTLdYaU3tMlRHtb9FhmJ2pvLbAxoOx8PieWkoe35v7k7FyW8jPl4DX6opyYuDzqbin8uaNmTD git@amster-nuc
--- /dev/null
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyxovdOSkIrIe8dzLcPg7/R1M3HYALvOj/+pVXTBHUNnc1rXkRT+6ECXVHG5eNNE7N7hrYB84ft0MhpLoIQgZQQ9ZtZvpjfk41eFgYEUMTrvRD8mHHBEnE92HctqvWWkar+5JhXlPn+cCUUmpl4Pti6bEjzAzuAP6W/YWY35Ouy39w2LyJcV+wTm3YJHZrKXVl0gt3Mb8ORGXBKMfVwdNWIaHsSnqd8YMRKyaHvGGLKeKZXNMRp7b1HqKARHH3y1UCH4PVFv5fhUxTiwButUYv1hXx4wVpdK/2DNiFT3YM1GsGQqj0mLehKvdsFFPA0KYVQfwhhcxOLqygAqCVa1dn git@amster-nuc
--- /dev/null
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcieLidti9XSkOD3EkZyigI+GGLBhe8bBhPuXI0afyxnuagbMz3vY3tzyMaQ7iEi9NGgUE2BnPaxp/04DQ9/fcjwlCeuYUq0Kk7ZP4XtVSsYuDPDcx/pcLaIUum/G6bZpDA9Hmq5B3zPDbbgq0ujCIAAusV8jAqgVw7LZJM9NejpvMLd3VAw6HrwQIptIyp+5w+6hQd2VcOVjcdprFQnZeLS0DzfY7557bKLomxXncbyNVd8NqB3YT1+m+P5+3SyQe0K8FKnwiIWvh6L8CpL1f40Dke/BOoKg5N/1LO7kpZP27yVG7gqKW+d9/aE0xGa+uLUKcSHyEqtIJ+D/oAg8f mikro_bak@10.30.30.81
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcieLidti9XSkOD3EkZyigI+GGLBhe8bBhPuXI0afyxnuagbMz3vY3tzyMaQ7iEi9NGgUE2BnPaxp/04DQ9/fcjwlCeuYUq0Kk7ZP4XtVSsYuDPDcx/pcLaIUum/G6bZpDA9Hmq5B3zPDbbgq0ujCIAAusV8jAqgVw7LZJM9NejpvMLd3VAw6HrwQIptIyp+5w+6hQd2VcOVjcdprFQnZeLS0DzfY7557bKLomxXncbyNVd8NqB3YT1+m+P5+3SyQe0K8FKnwiIWvh6L8CpL1f40Dke/BOoKg5N/1LO7kpZP27yVG7gqKW+d9/aE0xGa+uLUKcSHyEqtIJ+D/oAg8f mikro_bak@10.30.30.10
--- /dev/null
+[10.30.30.10]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHv+zKADwFHB8DebzFchw4/RkJQRAjDWS7k1DdzCYzLfLsWqXdSc24HDBSLtdlEl9pPY7VevZm+VH1vHU06Ws1MWMC1oNr3UotAeb3qckUGLEvNqsDO5JOVVbHZVkbnwqnSfBIgAPGUNTHOImqV48D/Hi7Oey10e/KvoEKIS+RSaAZ4OkI3IiSG/9fnwVPYrvdjNAkgFUumNFvN8q512MV5W1RZ5ajsZwuBucxf5Bhny/c5pNHCKHrnQdCnn7RKyhZHPRJaPNmFhO3/A5j/LBDt04FGF9LG+gCBCNkUnQpAUiDzxgyvY+wJetXahUCyJ9hLoGTGM4AyxsHfrhJkMs9
+[10.30.30.81]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAABAwAAAQEAv5SiOH3f0f9Ezf8aEfd27McFdJud+JYOJN8LRMmoxAM3SKJ1LI87ZqKNjjW6Fmy2Gs/CqLlh/QEfqQxs7xVfg6XuP2E8J/Oi3o4fgJIWGdwZhlSj4XUvDy47l70a+/j5mYvImseOK+wG+XuSkWqHzUWGMmnlqR8J08s7XygdDDWclj/voimaNlcku3mr8dF4I3xMhUuCkQPZDGZcmChhn/TMlpr9HPFjHf13qt+7xEtNL2UMswCQSfX8W4RPm23x+/Fz8ows7okIANoFkPuPYD/ZjZLWcffnXzWe5C4g+7tA7PUIBxShDN6zs1TUxkAwOgGnjVITqpfZnWPaJPXjRw==ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcieLidti9XSkOD3EkZyigI+GGLBhe8bBhPuXI0afyxnuagbMz3vY3tzyMaQ7iEi9NGgUE2BnPaxp/04DQ9/fcjwlCeuYUq0Kk7ZP4XtVSsYuDPDcx/pcLaIUum/G6bZpDA9Hmq5B3zPDbbgq0ujCIAAusV8jAqgVw7LZJM9NejpvMLd3VAw6HrwQIptIyp+5w+6hQd2VcOVjcdprFQnZeLS0DzfY7557bKLomxXncbyNVd8NqB3YT1+m+P5+3SyQe0K8FKnwiIWvh6L8CpL1f40Dke/BOoKg5N/1LO7kpZP27yVG7gqKW+d9/aE0xGa+uLUKcSHyEqtIJ+D/oAg8f mikro_bak@10.30.30.81
+[10.30.30.81]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQLNHp4kRmUeWA6+o72gnfGHkFKDx1G4Ix4bjeR0etZZqFWNbqtSwrcrltOKKBbLiu7vGf8MDnpGBoT7mDh3MIhxDLDeCxO2oqXTYu43oRA6LoKA4FbtBB1xVo1hp5jx6Xldsnx0RWbOTUl9NtvCqKjzYdenTDSSVrHegiM/H3G2IqJsjcXcGWZ/lDzahdhIfa19+GJH1VxlSi1z0A/m/r5gy5+FonRaI1v0zhHlicQJpSiLTFYpa6sdpbQ8/zXs4zKLargOFejcmeqW6ddO/7LGt6xmi9de+XeEWQMHkANihPeyxTtHyp4gfVCS01f4fLOG081t5FtWBv3lpAfuOb
+[10.30.30.86]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDtvYZKuBJmgUPLMCB9cVmk9fbxLMs31nsif6IkUzvKU5eYNnCjq/wk7LN698gVc7A+ZjugkiTKi4g9zdnhpksCRZa8QHrYVbAyb4ESE9Qw97fZxW+Ty7Q4egndTVpcOfj8P5rR/zPmyKHwKxmZt2PZauZuYYNaYE2wsKSB1IHxY9zEHr2sDxI8HDzAVlGHuEnJ/ME6/UMJPyS5aiVCYuWP8AZg8ZzzVxLcLXElMsZeb9eQwjaeqmHWebGQZEW3UDgjJPYahW3ZOISb0xuyZsjMHWjk/ce2H6uUMuywFAdlErtqbM/7Pf3Vr2Erjben9fsp0jtE0g5D7fBOTyPvhMyB
+amster-nuc ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIF0GwfNXmbVuoZxS88cgks+DuWkkb4pf6q0bdjl3qo5T
+amster-nuc ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDh9NAYI11XI05LoIbj1LWWwoZzxvgnfPN1YuJrkg0gBOUgIH6lt9Z6PHY7pUlNeZrdTKIk+WQ77vGOV34DzR/Y6BX/xyx0KiVCZHAzUEvp0YTY71rAFnkqvdmILyKXeLOw0fcp0tcxGbmoWzvs9WZg9TmBGUUajrP77dRSsV41aIFofXppE1icXzLuQjFBbq+PoEdNddAgOLBclm1r/ZTtn6zW4vebqzIRZrjD9NKa2u9AjqO4SXQNDynJ9zIj1zynuFjGnMFvi8lk7PG/lpOwQAgQZaGRtiDJ0nJpkEqpxhfr/egDLTO47kK4mndgSbycpbeExEjFQhpxW2gyTRXnlvf49zQu/zV/ZloSVpn10vyMu/PWfI7KXt9TmdTlZXsSdwgWLJ+imJdPmaisoXoyDeKO0rhbrVo4iDCEJ9OY584sb8iWO58onjPCqB3AeyLe6bshUIXAevPjHe3mlb/yIO4EA6b9RfMdCTluhhwXcd/Bl5q0RE5BNkAPad0ptLk=
+amster-nuc ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCjHiiX40OvEKvWBGi6JYzA50Tx5yyWH8OPaKITHEfU9UNHWKJgiqv6It08XkSoRZw3JXlo7D/saZL4VmY/qD48=
+vados-nuc ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJeE4qzjC7hUP1xPVx9yiG9L5s0K2eEPtdvSt95F0JBY
+vados-nuc ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDklJ/a8NtZU7ipBBjDc2gT7piwYTgk5f2v6WVl+ewMiW5kWYAHRlojkGkG5z4wHjmo82Vrm2X1jsCE8natblnqbGBxGpAZKiT6VNdjYeKzGLbZ/HFjsd5U1SAUuYjyy1Ub85h9M7DCXAwQyRwW6w3PBr+wWPJ3YNteDRcFYXcOKe65bP6wfZRSlh1FeYglHDDmEyHjThfzFCmoC8ukCHbOkrT67RtmxMjNGF6ED/vtGHVcYaRQ1cCxI1ZS36WFoV8pPhyj/0GXcDSTz0wDChlg1UbC2qxT99m4hB/d7+LYJf4Vr004oJ2MpwmuqMfTP/fDRr2Pj0WWySGLzg1ORxBRlgAL+9GGtbji+PHjZDvRcErUS1YnudiMn1IiE3LrxgnEyy44QONgWF13pmopIBXMWvy+jD+5QEdH8aTvcZ0/YGDdm3FNBE0vlFl0k77dQSM4rVHE2GnBkPejkWJG0m7LfizrRNW+L7k9cPCaqr0vev/4UHDOHExIiYWH9dpeTQM=
+vados-nuc ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBbH8mXlPOosJ8XetIkAsIBKA9V+KPVP6Okvpl1EEMAo7A6MWxSCRo80JafAoGqDmPuWGMgQYjW9DlNpk+IKRss=
+10.30.30.95 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJeE4qzjC7hUP1xPVx9yiG9L5s0K2eEPtdvSt95F0JBY
--- /dev/null
+[10.30.30.10]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHv+zKADwFHB8DebzFchw4/RkJQRAjDWS7k1DdzCYzLfLsWqXdSc24HDBSLtdlEl9pPY7VevZm+VH1vHU06Ws1MWMC1oNr3UotAeb3qckUGLEvNqsDO5JOVVbHZVkbnwqnSfBIgAPGUNTHOImqV48D/Hi7Oey10e/KvoEKIS+RSaAZ4OkI3IiSG/9fnwVPYrvdjNAkgFUumNFvN8q512MV5W1RZ5ajsZwuBucxf5Bhny/c5pNHCKHrnQdCnn7RKyhZHPRJaPNmFhO3/A5j/LBDt04FGF9LG+gCBCNkUnQpAUiDzxgyvY+wJetXahUCyJ9hLoGTGM4AyxsHfrhJkMs9
+[10.30.30.81]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAABAwAAAQEAv5SiOH3f0f9Ezf8aEfd27McFdJud+JYOJN8LRMmoxAM3SKJ1LI87ZqKNjjW6Fmy2Gs/CqLlh/QEfqQxs7xVfg6XuP2E8J/Oi3o4fgJIWGdwZhlSj4XUvDy47l70a+/j5mYvImseOK+wG+XuSkWqHzUWGMmnlqR8J08s7XygdDDWclj/voimaNlcku3mr8dF4I3xMhUuCkQPZDGZcmChhn/TMlpr9HPFjHf13qt+7xEtNL2UMswCQSfX8W4RPm23x+/Fz8ows7okIANoFkPuPYD/ZjZLWcffnXzWe5C4g+7tA7PUIBxShDN6zs1TUxkAwOgGnjVITqpfZnWPaJPXjRw==ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcieLidti9XSkOD3EkZyigI+GGLBhe8bBhPuXI0afyxnuagbMz3vY3tzyMaQ7iEi9NGgUE2BnPaxp/04DQ9/fcjwlCeuYUq0Kk7ZP4XtVSsYuDPDcx/pcLaIUum/G6bZpDA9Hmq5B3zPDbbgq0ujCIAAusV8jAqgVw7LZJM9NejpvMLd3VAw6HrwQIptIyp+5w+6hQd2VcOVjcdprFQnZeLS0DzfY7557bKLomxXncbyNVd8NqB3YT1+m+P5+3SyQe0K8FKnwiIWvh6L8CpL1f40Dke/BOoKg5N/1LO7kpZP27yVG7gqKW+d9/aE0xGa+uLUKcSHyEqtIJ+D/oAg8f mikro_bak@10.30.30.81
+[10.30.30.81]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQLNHp4kRmUeWA6+o72gnfGHkFKDx1G4Ix4bjeR0etZZqFWNbqtSwrcrltOKKBbLiu7vGf8MDnpGBoT7mDh3MIhxDLDeCxO2oqXTYu43oRA6LoKA4FbtBB1xVo1hp5jx6Xldsnx0RWbOTUl9NtvCqKjzYdenTDSSVrHegiM/H3G2IqJsjcXcGWZ/lDzahdhIfa19+GJH1VxlSi1z0A/m/r5gy5+FonRaI1v0zhHlicQJpSiLTFYpa6sdpbQ8/zXs4zKLargOFejcmeqW6ddO/7LGt6xmi9de+XeEWQMHkANihPeyxTtHyp4gfVCS01f4fLOG081t5FtWBv3lpAfuOb
+[10.30.30.86]:2222 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDtvYZKuBJmgUPLMCB9cVmk9fbxLMs31nsif6IkUzvKU5eYNnCjq/wk7LN698gVc7A+ZjugkiTKi4g9zdnhpksCRZa8QHrYVbAyb4ESE9Qw97fZxW+Ty7Q4egndTVpcOfj8P5rR/zPmyKHwKxmZt2PZauZuYYNaYE2wsKSB1IHxY9zEHr2sDxI8HDzAVlGHuEnJ/ME6/UMJPyS5aiVCYuWP8AZg8ZzzVxLcLXElMsZeb9eQwjaeqmHWebGQZEW3UDgjJPYahW3ZOISb0xuyZsjMHWjk/ce2H6uUMuywFAdlErtqbM/7Pf3Vr2Erjben9fsp0jtE0g5D7fBOTyPvhMyB
+amster-nuc ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIF0GwfNXmbVuoZxS88cgks+DuWkkb4pf6q0bdjl3qo5T
+amster-nuc ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDh9NAYI11XI05LoIbj1LWWwoZzxvgnfPN1YuJrkg0gBOUgIH6lt9Z6PHY7pUlNeZrdTKIk+WQ77vGOV34DzR/Y6BX/xyx0KiVCZHAzUEvp0YTY71rAFnkqvdmILyKXeLOw0fcp0tcxGbmoWzvs9WZg9TmBGUUajrP77dRSsV41aIFofXppE1icXzLuQjFBbq+PoEdNddAgOLBclm1r/ZTtn6zW4vebqzIRZrjD9NKa2u9AjqO4SXQNDynJ9zIj1zynuFjGnMFvi8lk7PG/lpOwQAgQZaGRtiDJ0nJpkEqpxhfr/egDLTO47kK4mndgSbycpbeExEjFQhpxW2gyTRXnlvf49zQu/zV/ZloSVpn10vyMu/PWfI7KXt9TmdTlZXsSdwgWLJ+imJdPmaisoXoyDeKO0rhbrVo4iDCEJ9OY584sb8iWO58onjPCqB3AeyLe6bshUIXAevPjHe3mlb/yIO4EA6b9RfMdCTluhhwXcd/Bl5q0RE5BNkAPad0ptLk=
+amster-nuc ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCjHiiX40OvEKvWBGi6JYzA50Tx5yyWH8OPaKITHEfU9UNHWKJgiqv6It08XkSoRZw3JXlo7D/saZL4VmY/qD48=
+vados-nuc ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJeE4qzjC7hUP1xPVx9yiG9L5s0K2eEPtdvSt95F0JBY
--- /dev/null
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcieLidti9XSkOD3EkZyigI+GGLBhe8bBhPuXI0afyxnuagbMz3vY3tzyMaQ7iEi9NGgUE2BnPaxp/04DQ9/fcjwlCeuYUq0Kk7ZP4XtVSsYuDPDcx/pcLaIUum/G6bZpDA9Hmq5B3zPDbbgq0ujCIAAusV8jAqgVw7LZJM9NejpvMLd3VAw6HrwQIptIyp+5w+6hQd2VcOVjcdprFQnZeLS0DzfY7557bKLomxXncbyNVd8NqB3YT1+m+P5+3SyQe0K8FKnwiIWvh6L8CpL1f40Dke/BOoKg5N/1LO7kpZP27yVG7gqKW+d9/aE0xGa+uLUKcSHyEqtIJ+D/oAg8f mikro_bak@10.30.30.10
--- /dev/null
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcieLidti9XSkOD3EkZyigI+GGLBhe8bBhPuXI0afyxnuagbMz3vY3tzyMaQ7iEi9NGgUE2BnPaxp/04DQ9/fcjwlCeuYUq0Kk7ZP4XtVSsYuDPDcx/pcLaIUum/G6bZpDA9Hmq5B3zPDbbgq0ujCIAAusV8jAqgVw7LZJM9NejpvMLd3VAw6HrwQIptIyp+5w+6hQd2VcOVjcdprFQnZeLS0DzfY7557bKLomxXncbyNVd8NqB3YT1+m+P5+3SyQe0K8FKnwiIWvh6L8CpL1f40Dke/BOoKg5N/1LO7kpZP27yVG7gqKW+d9/aE0xGa+uLUKcSHyEqtIJ+D/oAg8f mikro_bak@10.30.30.81
--- /dev/null
+# HSTS 1.0 Known Hosts database for GNU Wget.
+# Edit at your own risk.
+# <hostname> <port> <incl. subdomains> <created> <max-age>
+github.com 0 1 1771536570 31536000
+codeload.github.com 0 0 1771536571 31536000
--- /dev/null
+FROM reg.vados.ru/debian:trixie-slim
+
+##### Place "static" commands at the beginning to optimize image size and build speed
+
+# add non-privileged user
+RUN groupadd -g "36258" -r oxidized && \
+ useradd -u "1002" -r -m -d /home/oxidized -g oxidized oxidized && \
+ chsh -s /bin/bash oxidized
+
+# See PR #3637 - ruby runs /bin/sh and bash is whished for exec hooks
+RUN ln -sf /bin/bash /bin/sh
+
+##### MSMTP - Sending emails
+# link config for msmtp for easier use.
+# /home/oxidized/.msmtprc is a symbolic link to /home/oxidized/.config/oxidized/.msmtprc
+# Create the files as the user oxidized
+RUN mkdir -p /home/oxidized/.config/oxidized/ && \
+ touch /home/oxidized/.config/oxidized/.msmtprc && \
+ ln -s /home/oxidized/.config/oxidized/.msmtprc /home/oxidized/ && \
+ chmod -R ug=rwX,o= /home/oxidized/.config/ && \
+ chown -R oxidized:oxidized /home/oxidized/
+
+# add runit services
+COPY build/extra/oxidized.runit /etc/service/oxidized/run
+COPY build/extra/auto-reload-config.runit /etc/service/auto-reload-config/run
+COPY build/extra/update-ca-certificates.runit /etc/service/update-ca-certificates/run
+
+ADD config/mc.tar.gz /root/.config
+ADD config/mc.tar.gz /home/oxidized/.config
+
+# Prepare the build of oxidized, copy our working directory in the container
+COPY build/. /tmp/oxidized/
+WORKDIR /tmp/oxidized
+
+# set up dependencies for the build process
+RUN set -eux; export DEBIAN_FRONTEND=noninteractive; apt-get update;
+# no apt-get upgrade needed, as debian images are rebuilt on security issues
+
+# runit: lightweight service supervisor
+# dumb-init: proper PID 1 signal handling
+# gosu: run oxidized as the user oxidized
+# Build tools
+RUN set -eux; export DEBIAN_FRONTEND=noninteractive; apt-get install -y --no-install-recommends runit dumb-init gosu build-essential ruby-dev openssh-client vim-tiny inetutils-telnet curl jq \
+ git git-email \
+ libmailtools-perl msmtp \
+ ruby ruby-rugged ruby-slop ruby-net-telnet ruby-net-ssh ruby-net-ftp ruby-ed25519 ruby-net-scp \
+ ruby-net-http-persistent ruby-mechanize ruby-sqlite3 ruby-mysql2 ruby-pg ruby-sequel ruby-gpgme\
+ ruby-aws-sdk ruby-xmpp4r ruby-charlock-holmes ruby-haml ruby-htmlentities ruby-json \
+ puma ruby-sinatra ruby-sinatra-contrib ruby-faraday ruby-faraday-net-http ruby-faraday-multipart ruby-hashie ruby-concurrent mc;
+
+# build & install oxidized from the working repository
+# docker automated build gets shallow copy, but non-shallow copy cannot be unshallowed
+RUN set -eux; export DEBIAN_FRONTEND=noninteractive; git fetch --unshallow || true; rake install;
+
+# install oxidized-web and gems not available in debian trixie
+RUN set -eux; export DEBIAN_FRONTEND=noninteractive; gem install --no-document --no-wrappers --conservative --minimal-deps oxidized-web slack-ruby-client cisco_spark net-tftp x25519;
+RUN set -eux; export DEBIAN_FRONTEND=noninteractive; apt-get remove -y build-essential ruby-dev; apt-get autoremove -y ; apt-get clean;
+RUN set -eux; export DEBIAN_FRONTEND=noninteractive; rm -rf /var/lib/apt/lists/*; find /var/lib/gems/*/cache -mindepth 1 -delete; rm -rf /tmp/oxidized;
+
+WORKDIR /
+
+EXPOSE 88/tcp
+
+# dumb-init handles PID 1 for proper signal forwarding (Ctrl-C, SIGTERM)
+ENTRYPOINT ["/usr/bin/dumb-init", "--"]
+
+# runit supervises all services in /etc/service/
+CMD ["runsvdir", "-P", "/etc/service"]
--- /dev/null
+username: mikro_bak
+password: peskar55
+model: routeros
+resolve_dns: true
+# Interval to renew cofigs devices
+interval: 14400
+use_syslog: false
+debug: false
+run_once: false
+threads: 30
+use_max_threads: false
+timeout: 20
+retries: 3
+prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/
+rest: 0.0.0.0:88
+next_adds_job: false
+vars: {}
+groups: {}
+group_map: {}
+models: {}
+pid: "/var/www/ros.vados.ru/Mikrotiks/oxidized/config/pid"
+crash:
+ directory: "/var/www/ros.vados.ru/Mikrotiks/oxidized/config/crashes"
+ hostnames: false
+stats:
+ history_size: 10
+input:
+ default: ssh
+ debug: false
+ ssh:
+ secure: false
+ ftp:
+ passive: true
+ utf8_encoded: true
+output:
+ default: git
+ git:
+ user: amster-dev
+ email: vados@vados.ru
+ repo: "/oxidized/config/devices.git"
+source:
+ default: csv
+ csv:
+ file: "/var/www/ros.vados.ru/Mikrotiks/oxidized/config/router.db"
+ delimiter: !ruby/regexp /:/
+ map:
+ name: 0
+ model: 1
+ ip: 2
+ port: 3
+ username: 4
+ password: 5
+ gpg: false
+model_map:
+ juniper: junos
+ cisco: ios
--- /dev/null
+username: mikro_bak
+password: peskar55
+model: routeros
+resolve_dns: true
+# Interval to renew cofigs devices
+interval: 14400
+use_syslog: false
+debug: false
+run_once: false
+threads: 30
+use_max_threads: false
+timeout: 20
+retries: 3
+prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/
+rest: 0.0.0.0:88
+next_adds_job: false
+vars: {}
+groups: {}
+group_map: {}
+models: {}
+pid: "/opt/docker/oxidized/.config/pid"
+crash:
+ directory: "/opt/docker/oxidized/.config/crashes"
+ hostnames: false
+stats:
+ history_size: 10
+input:
+ default: ssh
+ debug: false
+ ssh:
+ secure: false
+ ftp:
+ passive: true
+ utf8_encoded: true
+output:
+ default: git
+ git:
+ user: amster-dev
+ email: vados@vados.ru
+ repo: "/oxidized/.config/devices.git"
+source:
+ default: csv
+ csv:
+ file: "/opt/docker/oxidized/.config/router.db"
+ delimiter: !ruby/regexp /:/
+ map:
+ name: 0
+ model: 1
+ ip: 2
+ port: 3
+ username: 4
+ password: 5
+ gpg: false
+model_map:
+ juniper: junos
+ cisco: ios
--- /dev/null
+MikroNUC:routeros:10.30.30.10:2222:mikro_bak:Peskar55
+MikroMaster:routeros:10.30.30.81:2222:mikro_bak:Peskar55
+MikroYellow:routeros:10.30.30.86:2222:mikro_bak:Peskar55
--- /dev/null
+#!/bin/bash
+#--project-name=amster-registry
+#docker network create -d bridge --attachable registry-ui-net
+
+#docker compose up -d --rem
+#docker compose registry-ui stop
+#docker cp registry-ui:/etc/nginx/nginx.conf tmp.conf
+#ls -l tmp.conf
+#docker-compose logs registry-ui
+#docker-compose build --pull
+# --no-cache
+#docker compose up -d
+sudo docker run --rm -v ~/oxidized/oxidized-config:/home/oxidized/.config/oxidized reg.vados.ru/oxidized:lts su mikro_bak -c oxidized
+#reg.vados.ru/oxidized:lts su - mikro_bak -c backups
+#sudo docker run --rm -v ~/oxidized-config:/home/oxidized/.config/oxidized docker.io/oxidized/oxidized:latest su - oxidized -c oxidized