Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Представьте, что вы управляете кластером из большого числа компьютеров. Однажды вам понадобилось завести нового пользователя, но, к сожалению, у вас нет централизованной системы хранения учетных данных, поэтому приходится заводить пользователей на каждом компьютере отдельно. Чтобы упростить себе задачу вы решили написать скрипт.
- На вход скрипт получает имя файла со списком компьютеров, имя нового пользователя. Помимо всего прочего вам понадобятся пароль текущего пользователя, пароль root’а, пароль для нового пользователя, но их скрипт должен запрашивать в процессе работы. Помните о том, что по умолчанию доступ root по ssh отключен поэтому заходить на компьютеры необходимо с именем текущего пользователя.
- Команды, которые могут вам пригодиться:
- ssh
- adduser
- su/sudo
- #!/bin/bash
- Path_PC_file=$1
- SSH_USERNAME=USER
- NEW_USER=$2
- #Path_PC_file=$1
- #NEW_USER=$2
- echo -n "Введите пароль пользователя, которого необходимо создать \"NEW_PASS\" "
- read NEW_PASS
- echo -n "Введите пароль текущего пользователя \"CUR_PASS\" "
- read CUR_PASS
- if [[ $(echo $CUR_PASS | sudo -S -v) ]]; then
- #echo -n "Введите пароль root \"ROOT_PASS\" "
- #read ROOT_PASS
- for SERVER in $(cat $Path_PC_file);
- do
- ssh ${SSH_USERNAME}@${SERVER} 'su useradd -d /home/"$NEW_USER" -s /bin/bash -p "$NEW_PASS" "$NEW_USER"'
- done
- echo 1
- else
- for SERVER in $(cat $Path_PC_file);
- do
- ssh ${SSH_USERNAME}@${SERVER} 'echo "$CUR_PASS" | sudo -S useradd -d /home/"$NEW_USER" -s /bin/bash -p "$NEW_PASS" "$NEW_USER"'
- echo 2
- done
- fi
- Задачка будет такой.
- Есть два компьютера А и Б.
- Наша цель состоит в том, чтобы некая заданная папка с компьютера А синхронизовалась с папкой на компьютере Б. Т.е. чтобы с некоторой периодичностью все изменения из папки компьютера А также оказывались в папке компьютера Б.
- Для того чтобы решить эту задачу нужно сделать следующее на компьютере А:
- 1) создать файл /etc/mysync.cfg
- В нем должны хранить следующие вещи - адрес компьютера Б, имя пользователя для подключения по ssh и его пароль, папка на компьютере А и папка на компьютере Б
- 2) создать скрипт sync.sh, который при запуске будет определять какие файлы изменились после последней синхронизации (подумайте, где сохранять время последней синхронизации), и копировать их на компьютер Б. Все необходимые настройки скрипт должен брать из файла /etc/mysync.cfg
- 3) Настроить cron так чтобы он периодически запускал скрипт.
- Как-то так.
- АМ
- 1. Создать этот файл, где на каждой строчке по порядку аргументы, сделать sudo touch /etc/mysync_check.cfg
- 2. #!/bin/bash
- addr=$(sed '1q;d' file)
- name=$(sed '2q;d' file)
- password=$(sed '3q;d' file)
- path_A=$(sed '4q;d' file)
- path_B=$(sed '5q;d' file)
- find . -newer '/etc/mysync_check.cfg' -type d -exec sshpass -p '$password' ssh ${name}@${addr} "mkdir -p $path_B/{} \; "
- find . -newer '/etc/mysync_check.cfg' -type f -exec sshpass -p '$password' scp {} ${name}@${addr}:/$path_B
- 3.добавить в cronttab -e например вот так */1 * * * * ~/sync.sh
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement