Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.43 KB | None | 0 0
  1. Представьте, что вы управляете кластером из большого числа компьютеров. Однажды вам понадобилось завести нового пользователя, но, к сожалению, у вас нет централизованной системы хранения учетных данных, поэтому приходится заводить пользователей на каждом компьютере отдельно. Чтобы упростить себе задачу вы решили написать скрипт.
  2.  
  3. На вход скрипт получает имя файла со списком компьютеров, имя нового пользователя. Помимо всего прочего вам понадобятся пароль текущего пользователя, пароль root’а, пароль для нового пользователя, но их скрипт должен запрашивать в процессе работы. Помните о том, что по умолчанию доступ root по ssh отключен поэтому заходить на компьютеры необходимо с именем текущего пользователя.
  4.  
  5. Команды, которые могут вам пригодиться:
  6. ssh
  7. adduser
  8. su/sudo
  9.  
  10.  
  11. #!/bin/bash
  12.  
  13. Path_PC_file=$1
  14. SSH_USERNAME=USER
  15. NEW_USER=$2
  16.  
  17. #Path_PC_file=$1
  18. #NEW_USER=$2
  19.  
  20. echo -n "Введите пароль пользователя, которого необходимо создать \"NEW_PASS\" "
  21. read NEW_PASS
  22.  
  23. echo -n "Введите пароль текущего пользователя \"CUR_PASS\" "
  24. read CUR_PASS
  25.  
  26. if [[ $(echo $CUR_PASS | sudo -S -v) ]]; then
  27. #echo -n "Введите пароль root \"ROOT_PASS\" "
  28. #read ROOT_PASS
  29.  
  30. for SERVER in $(cat $Path_PC_file);
  31. do
  32. ssh ${SSH_USERNAME}@${SERVER} 'su useradd -d /home/"$NEW_USER" -s /bin/bash -p "$NEW_PASS" "$NEW_USER"'
  33. done
  34. echo 1
  35. else
  36. for SERVER in $(cat $Path_PC_file);
  37. do
  38. ssh ${SSH_USERNAME}@${SERVER} 'echo "$CUR_PASS" | sudo -S useradd -d /home/"$NEW_USER" -s /bin/bash -p "$NEW_PASS" "$NEW_USER"'
  39. echo 2
  40. done
  41.  
  42. fi
  43.  
  44.  
  45. Задачка будет такой.
  46.  
  47. Есть два компьютера А и Б.
  48. Наша цель состоит в том, чтобы некая заданная папка с компьютера А синхронизовалась с папкой на компьютере Б. Т.е. чтобы с некоторой периодичностью все изменения из папки компьютера А также оказывались в папке компьютера Б.
  49.  
  50. Для того чтобы решить эту задачу нужно сделать следующее на компьютере А:
  51. 1) создать файл /etc/mysync.cfg
  52. В нем должны хранить следующие вещи - адрес компьютера Б, имя пользователя для подключения по ssh и его пароль, папка на компьютере А и папка на компьютере Б
  53. 2) создать скрипт sync.sh, который при запуске будет определять какие файлы изменились после последней синхронизации (подумайте, где сохранять время последней синхронизации), и копировать их на компьютер Б. Все необходимые настройки скрипт должен брать из файла /etc/mysync.cfg
  54. 3) Настроить cron так чтобы он периодически запускал скрипт.
  55.  
  56. Как-то так.
  57.  
  58. АМ
  59.  
  60.  
  61. 1. Создать этот файл, где на каждой строчке по порядку аргументы, сделать sudo touch /etc/mysync_check.cfg
  62. 2. #!/bin/bash
  63.  
  64. addr=$(sed '1q;d' file)
  65. name=$(sed '2q;d' file)
  66. password=$(sed '3q;d' file)
  67. path_A=$(sed '4q;d' file)
  68. path_B=$(sed '5q;d' file)
  69.  
  70. find . -newer '/etc/mysync_check.cfg' -type d -exec sshpass -p '$password' ssh ${name}@${addr} "mkdir -p $path_B/{} \; "
  71. find . -newer '/etc/mysync_check.cfg' -type f -exec sshpass -p '$password' scp {} ${name}@${addr}:/$path_B
  72. 3.добавить в cronttab -e например вот так */1 * * * * ~/sync.sh
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement