Skip to content

Instantly share code, notes, and snippets.

@vizvamitra
Last active August 29, 2015 14:13
Show Gist options
  • Save vizvamitra/13c9bb53b3733298dc28 to your computer and use it in GitHub Desktop.
Save vizvamitra/13c9bb53b3733298dc28 to your computer and use it in GitHub Desktop.
Запуск/выключение удалённой машины, монтирование/отмонтирование папки с неё
#!/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