Last active
August 29, 2015 14:13
-
-
Save vizvamitra/13c9bb53b3733298dc28 to your computer and use it in GitHub Desktop.
Запуск/выключение удалённой машины, монтирование/отмонтирование папки с неё
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# remoter by vizvamitra | |
# Скрипт работает с удалённой машиной в сети (например, вашим вторым домашним | |
# компьютером) | |
# Он автоматизирует запуск, выключение и монтирование/отмонтирование папки | |
# с удалённой машины, а заодно и вход по ssh (я ленивый) | |
# Я использую его на ноуте для удобства выдирания данных из старого компа | |
# Инструкции по использованию: remoter -h | |
## НАСТРОЙКИ | |
USERNAME=$USER # пользователь для коннекта по ssh | |
HOST='hostname' # имя удалённой машины | |
PORT=22 # порт ssh на удалённой машине | |
REMOTE_DIR='/path/to/remote/dir' # папка на удалённой машине, | |
# которую будем монтировать | |
MOUNT_POINT='/path/to/mount/point' # точка монтирования | |
WAKE_ON_LAN_SCRIPT='/path/to/wol/script' # скрипт для запуска удалённой | |
# машины через сеть | |
############ | |
function start { | |
launch | |
mount | |
} | |
function quit { | |
unmount | |
halt | |
} | |
function print_help { | |
echo "USAGE: $(basename $0) COMMAND" | |
echo "COMMANDS:" | |
echo " -c - connect $HOST via ssh" | |
echo " -l - launch $HOST" | |
echo " -s - shut down $HOST" | |
echo " -m - mount remote dir" | |
echo " -u - unmount remote dir" | |
echo " -r - launch $HOST and mount remote dir" | |
echo " -q - unmount remote dir and shut down $HOST" | |
echo " -h - print help" | |
} | |
function launch { | |
log 'Отправка сигнала запуска...' | |
run $WAKE_ON_LAN_SCRIPT | |
log 'Ожидание запуска...' | |
start=$(date +"%s") | |
while ! nc -vz $HOST $PORT 2> /dev/null; do | |
now=$(date +"%s") | |
if [ $(($(date +'%s') - $start)) -ge 120 ]; then # ждём не более 1 минуты | |
>&2 error 'Превышен интервал ожидания' | |
exit 1 | |
fi | |
sleep 1 | |
done | |
log "Время ожидания (сек): $(($(date +'%s') - $start))" | |
} | |
function mount { | |
log "Монтирование $HOST:$REMOTE_DIR к $MOUNT_POINT..." | |
run "sshfs $HOST:$REMOTE_DIR $MOUNT_POINT -p $PORT" | |
} | |
function unmount { | |
log "Отмонтирование $MOUNT_POINT..." | |
run "fusermount -u $MOUNT_POINT" | |
} | |
function halt { | |
log "Возможно потребуется ввод sudo-пароля для $USERNAME@$HOST" | |
log 'Отправка сигнала завершения работы...' | |
run "ssh -t $USERNAME@$HOST -p $PORT 'sudo init 0'" | |
} | |
function connect { | |
log 'Попытка подключения по ssh...' | |
run "ssh $USERNAME@$HOST -p $PORT" | |
} | |
function run { | |
echo -e "\033[0;33m${1}\033[0m" | |
eval $1 | |
} | |
function log { | |
echo -e "\033[1;30m${1}\033[0m" | |
} | |
function error { | |
echo -e "\033[0;31mОШИБКА!\033[0m $1" | |
} | |
if [ "$1" = "-r" ]; then | |
start | |
elif [ "$1" = "-c" ]; then | |
connect | |
elif [ "$1" = "-q" ]; then | |
quit | |
elif [ "$1" = "-l" ]; then | |
launch | |
elif [ "$1" = "-s" ]; then | |
halt | |
elif [ "$1" = "-m" ]; then | |
mount | |
elif [ "$1" = "-u" ]; then | |
unmount | |
elif [ "$1" = "-h" ]; then | |
print_help | |
else | |
error "Неизвестная комманда: '$1'" | |
print_help | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment