Bash snippet - Mount and unmount cryptofs files easily.


SUBMITTED BY: DanielK

DATE: Aug. 13, 2016, 2:56 p.m.

FORMAT: Bash

SIZE: 1.7 kB

HITS: 735

  1. # cr_mount <cryptofs file> <mount point>
  2. # Note: You'll be asked for passphrase.
  3. #
  4. # cr_umount <mount point>
  5. function cr_mount()
  6. {
  7. local CRYPTOFS_LOOPDEV_NAME
  8. local CRYPTOFS_MAP_NAME
  9. if [ $# -gt 1 ]; then
  10. CRYPTOFS_MAP_NAME=cryptofs$( date +%s%N )
  11. CRYPTOFS_LOOPDEV_NAME=$( losetup -j $( realpath "${1}" ) | cut -d : -f 1; )
  12. if [ -z "$CRYPTOFS_LOOPDEV_NAME" ]; then
  13. CRYPTOFS_MAP_LOOP=$( losetup -f --show $( realpath "${1}" ) ) || return 1;
  14. else
  15. echo REMOVING UNNEEDED LOOP DEVICES
  16. losetup -d "${CRYPTOFS_LOOPDEV_NAME}"
  17. fi
  18. cryptsetup create "${CRYPTOFS_MAP_NAME}" "${CRYPTOFS_MAP_LOOP}" && \
  19. mount "/dev/mapper/${CRYPTOFS_MAP_NAME}" "${2}" && { echo Mounted "${1}" properly. Use cr_umount to unmount.; } || \
  20. {
  21. echo Mount failed. Bad password?; \
  22. cryptsetup remove "${CRYPTOFS_MAP_NAME}" "${CRYPTOFS_MAP_LOOP}" ; \
  23. losetup -d "${CRYPTOFS_MAP_LOOP}";
  24. }
  25. else
  26. echo "${FUNCNAME} <encrypted file path> <mount point>"
  27. fi
  28. }
  29. function cr_umount()
  30. {
  31. local CRYPTOFS_LOOPDEV_NAME
  32. local CRYPTOFS_MAP_NAME
  33. if [ $# -gt 0 ]; then
  34. CRYPTOFS_MAP_NAME=$( basename $( df "${1}" --output=source | ( read; read -r devn ; echo "${devn}" ) ) ) || return 1;
  35. CRYPTOFS_LOOPDEV_NAME=$( cryptsetup status "${CRYPTOFS_MAP_NAME}" | sed -n 's/\(.*device: \)\(.*\).*$/\2/p' ) || return 1;
  36. mount | fgrep mapper &> /dev/null && { umount "${1}" || return 1; } || echo Not mounted.
  37. if [ -n "${CRYPTOFS_MAP_NAME}" -a -n "${CRYPTOFS_LOOPDEV_NAME}" ]; then
  38. cryptsetup remove "${CRYPTOFS_MAP_NAME}"
  39. losetup -d "${CRYPTOFS_LOOPDEV_NAME}"
  40. fi
  41. else
  42. echo "${FUNCNAME} <mount point>"
  43. fi
  44. }

comments powered by Disqus