Наверное все уже и так знают, что всегда хорошо иметь большой и сложный пароль. Многие так же знают про менеждеры паролей и как удобно, а главное безопасно можно хранить в них информацию.


По специфике моей работы мне часто приходится записывать и хранить большое количество паролей и другой конфиденциальной информации, поэтому я пользуюсь Keepass2 — менеджером паролей со свободной лицензией. Я не стану рассказывать о его возможностях и преимуществах перед другими, все это и так уже обсуждалось не раз. Если кто хочет познакомиться подробнее, вот несколько ссылок: wiki, обзорная статья, сравнения с другими: 1 2.
Вместо этого я хотел бы рассказать об одной его интересной функции:


Функция называется "URL Overrides", и представляет ссобой возможность запускать ассоциированные с записями программы и передавать им данные для аутентификации прямо из Keepass'а.


Например, вы можете хранить в keepass'е список учеток для подключения к удаленному серверу, а в определенный момент выбрать нужную и простым нажатием Ctrl+U, запустить клиент удаленного подключения, и моментально получить доступ к вашему серверу.
Это очень удобно, так как все логины и пароли не хранятся абы где, а надежно зашифрованны в вашей базе keepass и передаются программе-клиенту только в момент подключения.


Идея состоит в том, что бы использовать Keepass как единую точку входа на все удаленные сервера.


Как это работает? (GIF 2.4M)

Должен признаться, изначально я планировал написать статью только про настройку keepas на Linux, но по ходу написания накопилось достаточно материала и для Windows-пользователей.
Решил не обделять большую часть пользователей более популярной ОС столь занятным материалом.
Для каждого протокола я указал комманды работающие как под windows так и под linux


Итак приступим:


Создание записей


Для того чтобы keepass знал к какому протоколу соответствует ваша запись, вам следует использовать ссылки вида rdp://server, ssh://server, ftp://server


Настройка Keepass2


Для того чтобы keepass знал какие и как именно нужно запускать программы для этих протоколов, вам нужно настроить обработчик ссылок.
Для этого перейдем в Tools --> Options --> Integraion --> URL Overrides... и настроим протоколы:


SSH


[windows] PuTTY


  • Scheme: ssh
  • Command:
    cmd://"{ENV_PROGRAMFILES_X86}\PuTTY\putty.exe" -ssh "{USERNAME}@{URL:HOST}" -P {URL:PORT} -pw "{PASSWORD}"

[linux] OpenSSH Client


  • Scheme: ssh
  • Command:


    cmd://xterm -e sshpass -p {PASSWORD} ssh -o StrictHostKeyChecking=no {USERNAME}@{BASE:RMVSCM}

    Более безопасный вариант:


    cmd://bash -c 'FILE=$(mktemp) && chmod 600 $FILE && echo {PASSWORD} > $FILE ; xterm -e sshpass -f $FILE ssh -o StrictHostKeyChecking=no {USERNAME}@{BASE:RMVSCM}; rm -f $FILE'


Вам так же нужно установить пакет sshpass
Вместо xterm можете подставить ваш любимый эмулятор терминала


RDP


[windows] MSTSC


  • Scheme: rdp
  • Command:
    cmd://cmd /c "cmdkey /generic:TERMSRV/{BASE:RMVSCM} /user:{USERNAME} /pass:{PASSWORD} && mstsc /v:{BASE:RMVSCM} && timeout /t 5 /nobreak && cmdkey /delete:TERMSRV/{BASE:RMVSCM}"

За решение спасибо Valiant с bitcollectors.com


[linux] Remmina


  • Scheme: rdp
  • Command:


    cmd://bash -c "FILE=/tmp/connect.remmina ; echo -en '[remmina]\nname={TITLE}\nprotocol=RDP\nserver={BASE:RMVSCM}\nscale=1\nviewmode=1\nusername={USERNAME}\npassword='`remmina-encode-password.py {PASSWORD}` > $FILE ; remmina -c $FILE ; rm -f $FILE"

    Более безопасный вариант:


    cmd://bash -c "export DIR=/tmp/remmina; mkdir -p $DIR; chmod 700 $DIR; export FILE=$(mktemp -p $DIR XXXXXXXXXX --suffix=.remmina); echo -e '[remmina]\nname={TITLE}\nprotocol=RDP\nserver={BASE:RMVSCM}\nscale=1\nviewmode=1\nusername={USERNAME}\npassword='`remmina-encode-password.py {PASSWORD}` > $FILE ; nohup remmina -c $FILE &"


так же нам понадобится установить небольшой вспомогательный скрипт:


curl -o /usr/local/bin/remmina-encode-password.py https://raw.githubusercontent.com/kvaps/keepass2-url-overriddes/master/remmina/remmina-encode-password.py
chmod +x /usr/local/bin/remmina-encode-password.py

VNC


[windows] RealVNC


  • Scheme: vnc
  • Command:
    cmd://java -jar "{ENV_PROGRAMFILES}\tightvnc-jviewer.jar" -user="{USERNAME}" -password="{PASSWORD}" {BASE:RMVSCM}

Сохраните tightvnc-jviewer.jar в C:\Program Files\tightvnc-jviewer.jar.


[linux] Remmina


  • Scheme: vnc
  • Command:


    cmd://bash -c "FILE=/tmp/connect.remmina ; echo -en '[remmina]\nname={TITLE}\nprotocol=VNC\nserver={BASE:RMVSCM}\nscale=1\nviewmode=1\nusername={USERNAME}\npassword='`remmina-encode-password.py {PASSWORD}` > $FILE ; remmina -c $FILE ; rm -f $FILE"

    Более безопасный вариант:


    cmd://bash -c "export DIR=/tmp/remmina; mkdir -p $DIR; chmod 700 $DIR; export FILE=$(mktemp -p $DIR XXXXXXXXXX --suffix=.remmina); echo -e '[remmina]\nname={TITLE}\nprotocol=VNC\nserver={BASE:RMVSCM}\nscale=1\nviewmode=1\nusername={USERNAME}\npassword='`remmina-encode-password.py {PASSWORD}` > $FILE ; nohup remmina -c $FILE &"


Нам все так же требуется небольшой вспомогательный скрипт, про который я писал выше


curl -o /usr/local/bin/remmina-encode-password.py https://raw.githubusercontent.com/kvaps/keepass2-url-overriddes/master/remmina/remmina-encode-password.py
chmod +x /usr/local/bin/remmina-encode-password.py

SAMBA


[windows] Explorer


  • Scheme: smb
  • Command:
    cmd://cmd /c "net use "{BASE:RMVSCM}" /user:"{USERNAME}" "{PASSWORD}" && start \\{BASE:RMVSCM}"

[linux] Nautilus / Thunar / Dolphin


  • Scheme: smb
  • Command:


    cmd://bash -c "echo -e '\n{PASSWORD}' | gvfs-mount 'smb://{USERNAME}@{BASE:RMVSCM}' ; nautilus 'smb://{USERNAME}@{BASE:RMVSCM}'"

    Более безопасный вариант:


    cmd://bash -c "echo -e '\n{PASSWORD}' | gvfs-mount 'smb://{USERNAME}@{BASE:RMVSCM}' ; nohup nautilus 'smb://{USERNAME}@{BASE:RMVSCM}' &"


Для Thunar и Dolphin команда будет такая же, достаточно заменить nautilus на thunar или dolphin.


FTP


[windows] FileZilla FTP Client


  • Scheme: ftp
  • Command:
    cmd://"{ENV_PROGRAMFILES_X86}\FileZilla FTP Client\filezilla.exe" 'ftp://{USERNAME}:{PASSWORD}@{BASE:RMVSCM}'

[windows] Windows Explorer


  • Scheme: ftp
  • Command:
    cmd://"explorer.exe" 'ftp://{USERNAME}:{PASSWORD}@{BASE:RMVSCM}'

[linux] FileZilla FTP Client


  • Scheme: ftp
  • Command:
    cmd://filezilla 'ftp://{USERNAME}:{PASSWORD}@{BASE:RMVSCM}'

[linux] Nautilus / Thunar / Dolphin


  • Scheme: smb
  • Command:


    cmd://bash -c "echo -e '\n{PASSWORD}' | gvfs-mount 'ftp://{USERNAME}@{BASE:RMVSCM}' ; nautilus 'ftp://{USERNAME}@{BASE:RMVSCM}'"

    Более безопасный вариант:


    cmd://bash -c "echo -e '\n{PASSWORD}' | gvfs-mount 'ftp://{USERNAME}@{BASE:RMVSCM}' ; nohup nautilus 'ftp://{USERNAME}@{BASE:RMVSCM}' &"


Для Thunar и Dolphin команда будет такая же, достаточно заменить nautilus на thunar или dolphin.


TeamViewer


[windows] TeamViewer


  • Scheme: teamviewer
  • Command:
    cmd://"{ENV_PROGRAMFILES_X86}\TeamViewer\TeamViewer.exe" -i "{USERNAME}" --Password "{PASSWORD}"

[linux] TeamViewer


  • Scheme: teamviewer
  • Command:
    cmd://teamviewer -i "{USERNAME}" --Password "{PASSWORD}"

Winbox


[windows] Winbox


  • Scheme: winbox
  • Command:
    cmd://{ENV_PROGRAMFILES_X86}\winbox.exe '{BASE:RMVSCM}' '{USERNAME}' '{PASSWORD}'

Сохраните winbox.exe в C:\Program Files (x86)\winbox.exe.


[linux] Winbox


  • Scheme: winbox
  • Command:
    cmd://winbox '{BASE:RMVSCM}' '{USERNAME}' '{PASSWORD}'

Я использую пакет winbox из AUR.


Заключение


Примеров я думаю предостаточно. На этом пожалуй все.
Теперь, выбрав нужную запись и нажав Ctrl+U, вы сразу подключитесь куда нужно. И вам не придется сохранять пароли где-то еще.
Для более экзотических случаев вы всегда можете написать свой обработчик, вам лишь достаточно узнать параметры запуска нужной вам программы и отразить их в команде.


Пара ссылок по теме:



Если есть какие-то пожелания/дополнения пишите их в коментарии или на Github.
Благодарю за внимание.

Поделиться с друзьями
-->

Комментарии (39)


  1. grossws
    23.06.2016 07:57
    +1

    Спрячте gif ниже ката, т. к. вне зависимости от наличия спойлера он загружается браузером.


    1. kvaps
      23.06.2016 08:23

      done


  1. mihmig
    23.06.2016 09:10
    +7

    Передаёте пароли в командной строке?
    Тогда они все будут видны в выводе команды ps?


    1. kvaps
      23.06.2016 10:40

      Да, вы правы, некоторые примеры не самые лучшие в плане безопасности.
      Но решения для RDP, VNC, SMB и FTP (не FileZilla) лишены этого недостатка.


      Для остальных программ вы можете просто убрать пароль из аргументов команды, и точно так же иницилизировать нуные подключения прямо из keepass, а пароль вводить привычным для вас способом.


    1. dbax
      23.06.2016 11:40
      +1

      Да будут. В Windows task manager отображает пароль :(


      1. mihmig
        23.06.2016 11:53

        Это прискорбно.
        И если в Windows можно попробовать «заинсертить» логин/пароль в формочку (по аналогии с AutoIt)
        То в linux полный «швах» — зоопарк WM и технологий рисования форм…


        1. kvaps
          23.06.2016 12:10

          У keepass есть втроенная функция Auto-Type. В большинстве случаев она работает более-менее пристойно.


  1. nikitasius
    23.06.2016 09:14
    +1

    Прикольно! По настоящему handy!
    Но я не могу избавится от привычки копипасты из того же keepass2.


  1. kvaps
    23.06.2016 09:35
    +2

    В дополнение к своей статье хочу рассказать про замечательный плагин для браузера: PassIFox для Mozilla Firefox и chromeIPass для Google Chrome.
    В отличии от KeeFox он интегрируется вместо встроенной функции сохранения паролей в браузере, не изменяет стандартный интерфейс браузера и не создает новые диалоговые окна. (что особенно радует в тайловых wm)


    1. landergate
      23.06.2016 10:17
      +1

      Добавлю, что для Firefox-а есть не менее прекрасная (и зрелая) интеграция под названием KeeFox. Пользуюсь уже много лет, очень удобно. Браузер общается с KeePass через RPC по авторизованному токену.


    1. Lindon_cano
      23.06.2016 11:40

      Пробовал перейти с LastPass на KeepAss, но вот как раз убогость и какая-то общая недоработанность chromeIPass не дала мне полностью перейти на KeepAss и вынудила остаться на LastPass.


      1. kvaps
        23.06.2016 11:47

        Не знаю как chromeIPass, но PassIFox мне очень понравился, до этого я пользовался KeeFox, но он ужасно глючит в тайлинге. :(


        1. landergate
          23.06.2016 13:44

          Ему с тех пор апгрейднули интерфейс и движок.
          Возможно теперь понравится больше, если будет повод.


      1. NoOne
        23.06.2016 12:01
        +3

        Интересно… я всегда считал, что программа называется KeePass, а не KeepAss))


      1. rPman
        23.06.2016 18:48

        Подскажите, нет ли готового решения, чтобы менеджер паролей был запущен на мобильном, и по ip передавался только нужный пароль по запросу с разрешения на сотовом (соответственно с интеграцией в браузер и аналог автонабора логина пароля нажатиями кнопок, по возможности).


  1. roomine
    23.06.2016 10:18

    А как настроить подобное в макоси? Какой протокол для запуска терминала?


    1. elmigranto
      23.06.2016 10:43

      > Какой протокол для…

      Нет, вы сами придумываете схему, а потом говорите KeePass'у, что для этой схемы делать.


    1. kvaps
      23.06.2016 11:04

      В вашем случае нужно использовать комманду open.
      ответ на StackOverflow


      То есть ваша комманда должна выглядеть примерно следующим образом:


      cmd://open ./AppName.app --args -AppCommandLineArg


  1. dmbarsukov
    23.06.2016 11:57

    Авторизацию по ключу, который сохраняется в keepass не настраивали?


    1. kvaps
      23.06.2016 12:30

      Вы про SSH? Не пробовал, но думаю, что такой вариант вполне сработает:


      cmd://bash -c 'FILE=$HOME/.ssh/id_rsa.tmp ; echo {PASSWORD} > $FILE && chmod 600 $FILE ; xterm -e ssh -i $FILE -o StrictHostKeyChecking=no kvaps@localhost ; rm -f $FILE'

      При этом сам закрытый ключ вам придется хранить в поле пароль


      1. Vindicar
        23.06.2016 15:43

        Есть еще поле {NOTES}, но оно не защищено.


    1. Askon
      24.06.2016 00:17

      KeeAgent плагин нормально работает в роли ssh агента


  1. divanikus
    23.06.2016 15:25

    Чтобы не передавать пароли в ssh, поставьте плагин KeeAgent и храните в базе свои private ключи. Плагин симулирует ssh-agent и соответственно пароль передавать не надо, только логин и хост с портом.


    1. divanikus
      23.06.2016 15:26

      Кстати в строке для Windows ошибка:
      -pw {BASE:PORT} -pw "{PASSWORD}"
      Я полагаю что для порта должно быть не -pw.


      1. kvaps
        23.06.2016 15:52

        Убрал вообще указание порта в комманде, а то с ним что-то не работает...


        1. Kapman
          24.06.2016 12:42

          Порт указывается по другому:
          -P {BASE:PORT}

          Полная строка, которая работает у меня:
          cmd://"{ENV_PROGRAMFILES_X86}\PuTTY\putty.exe" -ssh "{USERNAME}@{URL:HOST}" -P {BASE:PORT} -pw "{PASSWORD}"


          1. kvaps
            24.06.2016 12:49

            У вас работает эта команда, если в URL записи порт не указан?


            1. Kapman
              24.06.2016 13:02

              Проверил, работает, PuTTY подключилась.


              1. kvaps
                24.06.2016 15:30

                Ок, вернул опцию на место :)


  1. navion
    23.06.2016 15:36

    Небольшая поправка: Scheme в URL Override надо указывать без двоеточия и слешей, иначе работать не будет.


    1. kvaps
      24.06.2016 11:53

      Спасибо, исправил.


  1. Dee3
    23.06.2016 20:36

    А можно ли сделать чтобы по клику в KeePass например открывал почтовый сервис в браузере и авторизовался сам?


    1. kvaps
      23.06.2016 21:28

      Можно в два клика.
      Используйте Auto-Type или плагин для браузера.


  1. batja84
    24.06.2016 09:10

    Пользуюсь KeePass но только в рамках Chrome. Что-то не получилось передать Teamviewer логин и пароль. :(


  1. Canto
    24.06.2016 09:11

    Хороший полезный пост, спасибо. В некоторых случаях работает. Но RDP в Win7 не срабатывает, если до этого уже подключались, останавливается на окошке ввода пароля. Видимо рассчитано когда оба поля (Юзер+пароль) пустые. Это в Windows 7 так, на XP наверное получится.
    Нашел также ошибки в статье: в VNC и Teamviewer для Windows перед сценарием нет cmd://


    1. kvaps
      24.06.2016 11:46

      Спасибо, исправил.
      Также для некоторых протоколов добавил более безопасные команды для передачи аргументов.


  1. Canto
    24.06.2016 09:27

    Ошибся, RDP Scheme работает нормально. Надо убрать галку «Разрешить мне сохранять учетные данные» в настройках mstsc клиента. Для этого надо запустить его как есть из командной строки Windows и ткнуть на кнопку внизу слева «Параметры»


  1. storm
    28.06.2016 12:50

    А кто-то пользуется PAC manager? У него есть интергация с KeePassX. Мне функционала последнего хватает и не нужно ставить mono.


  1. kromel
    01.07.2016 07:40

    Плагины к кеепасу вообще творят чудеса.

    Вот у меня запись на работе

    image

    cmd://{DB_DIR}\putty.lnk -ssh -l {USERNAME} -pw {PASSWORD} {S:IP}
    cmd://{DB_DIR}\winscp.lnk scp://{USERNAME}:{PASSWORD}@{S:IP}

    image