Настраиваем URL Overrides в Keepass2


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


    По специфике моей работы мне часто приходится записывать и хранить большое количество паролей и другой конфиденциальной информации, поэтому я пользуюсь 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/{URL:HOST} /user:{USERNAME} /pass:{PASSWORD} && mstsc /v:{BASE:RMVSCM} && cmdkey /delete:TERMSRV/{URL:HOST}"

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


    [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.


    Cisco


    [windows] PuTTY


    • Scheme: cisco
    • Command:


      cmd://{ENV_PROGRAMFILES_X86}\scriptsdir\Connector_Cisco.vbs "{S:lan}" "{USERNAME}" "{PASSWORD}" "{S:enable}"

      Так же скачиваем сам Connector_Cisco.vbs
      И сохраняем его по пути: C:\Program Files (x86)\Connector_Cisco.vbs


      Решение и скрипт любезно предоставил therb1 с habrahabr.ru



    Заключение


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


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



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

    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 45
    • +1

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

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

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


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

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

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

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

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

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

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

                  • 0
                    Ему с тех пор апгрейднули интерфейс и движок.
                    Возможно теперь понравится больше, если будет повод.
                  • +3
                    Интересно… я всегда считал, что программа называется KeePass, а не KeepAss))
                    • 0
                      Ну… Вариант KeepAss выглядит тоже логичным, это была не опечатка, это я специально.
                    • 0
                      Подскажите, нет ли готового решения, чтобы менеджер паролей был запущен на мобильном, и по ip передавался только нужный пароль по запросу с разрешения на сотовом (соответственно с интеграцией в браузер и аналог автонабора логина пароля нажатиями кнопок, по возможности).
                  • 0
                    А как настроить подобное в макоси? Какой протокол для запуска терминала?
                    • 0
                      > Какой протокол для…

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

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


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


                        cmd://open ./AppName.app --args -AppCommandLineArg
                      • 0
                        Авторизацию по ключу, который сохраняется в keepass не настраивали?
                        • 0

                          Вы про 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'

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

                          • 0
                            Есть еще поле {NOTES}, но оно не защищено.
                            • 0
                              А можно обойтись без временного файла? Скажем:
                              cmd://bash -c 'echo {PASSWORD} | xterm -e ssh -i /dev/stdin -o StrictHostKeyChecking=no kvaps@localhost'
                              

                              Сам проверить не могу, под рукой линукс-машины нету.
                              • 0
                                Нет, похоже что не сработает. ssh нужен stdin.
                            • 0
                              KeeAgent плагин нормально работает в роли ssh агента
                            • 0
                              Чтобы не передавать пароли в ssh, поставьте плагин KeeAgent и храните в базе свои private ключи. Плагин симулирует ssh-agent и соответственно пароль передавать не надо, только логин и хост с портом.
                              • 0
                                Кстати в строке для Windows ошибка:
                                -pw {BASE:PORT} -pw "{PASSWORD}"
                                Я полагаю что для порта должно быть не -pw.
                                • 0

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

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

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

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

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

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

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

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

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

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

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

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

                                      • 0
                                        Ошибся, RDP Scheme работает нормально. Надо убрать галку «Разрешить мне сохранять учетные данные» в настройках mstsc клиента. Для этого надо запустить его как есть из командной строки Windows и ткнуть на кнопку внизу слева «Параметры»
                                        • 0
                                          А кто-то пользуется PAC manager? У него есть интергация с KeePassX. Мне функционала последнего хватает и не нужно ставить mono.
                                          • 0
                                            Плагины к кеепасу вообще творят чудеса.

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

                                            image

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

                                            image

                                            • +1
                                              Чтобы RDP (под Win) подключался при обращении через IP:port (это если у вас нет доменного имени и порт не стандартный 3389), надо указывать в cmdkey только IP хоста, без порта.
                                              Да и таймаут перед закрытием в cmd совсем не нужен.
                                              На мой взгляд, правильно будет так:
                                              cmd://cmd /c "cmdkey /generic:TERMSRV/{URL:HOST} /user:{USERNAME} /pass:{PASSWORD} && mstsc /v:{BASE:RMVSCM} && cmdkey /delete:TERMSRV/{URL:HOST}"
                                              • 0

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

                                                • 0
                                                  Таймаут пригодится, если не хочется видеть черное окно командной строки, пока открыт mstsc, только еще start нужно добавить.
                                                  cmd://cmd /c "cmdkey /generic:TERMSRV/{URL:HOST} /user:{USERNAME} /pass:{PASSWORD} && start mstsc /v:{BASE:RMVSCM} && timeout /t 10 /nobreak && cmdkey /delete:TERMSRV/{URL:HOST}"
                                                  

                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.