Сохранить пароль для текущего сеанса терминала

avatar
mwalto7
8 апреля 2018 в 03:22
246
0
1

Я пишу приложение командной строки на Go, которое позволяет автоматизировать настройку сетевых устройств через SSH. К сожалению, большинство этих устройств настроены на аутентификацию по паролю, а не по ключу. Есть ли способ временно и безопасно сохранить пароль пользователя только для текущего сеанса терминала? Подобно тому, как установка переменной среды с помощью export ENV_VAR=<value> сохраняет только переменную среды для текущего сеанса. Например, пользователь открывает терминал, запускает мой интерфейс командной строки, и у него запрашивается пароль. Для последующих вызовов моей программы я бы не хотел снова запрашивать у пользователя пароль. Однако, если пользователь закрывает свой терминал, а затем возвращается позже, я бы хотел, чтобы запрос пароля снова появлялся при вызове моего CLI. Если возможно, я хотел бы сделать это без использования базы данных, поскольку количество пользователей моего CLI будет очень небольшим.

Источник
Omkar Nath Singh
8 апреля 2018 в 03:26
0

Вы можете предложить пользователю получить значение, а затем сохранить его в переменной var. Тогда используйте этот $var везде. Он будет существовать только для терминальной сессии. Это может решить вашу цель.

Peter
8 апреля 2018 в 09:55
0

Разве это не предполагает, что все устройства используют один и тот же пароль? Кто так делает?

Peter
8 апреля 2018 в 10:02
0

Возможно, хранение учетных данных в течение некоторого времени является жизнеспособной альтернативой, так же, как sudo может кэшировать ваш пароль? Я, например, почти никогда не закрываю некоторые из своих терминалов. Возможно, существуют криптографические методы, которые через некоторое время делают зашифрованный текст непригодным для использования. Затем вы можете просто сохранить учетные данные в файле.

reticentroot
8 апреля 2018 в 23:43
0

Просто подумав здесь, вы можете создать коробку, которая действует как туннель. Этот ящик может использовать key authentication. Войдите в этот ящик по ssh, который затем туннелирует + прокси к другому ящику. Пароль сеанса, если он один и тот же, может быть ENV var в туннельном блоке. Если это слишком, пусть инструмент командной строки сохранит пароль пользователя как локальный ENV в собственном ящике этого пользователя и найдет его там с помощью os.Getenv. Таким образом, пользователь получает запрос один раз, а пароль хранится локально и т. д. Должен быть флаг обновления пароля на тот случай, если его нужно изменить.

reticentroot
8 апреля 2018 в 23:49
0

Еще лучше, когда пользователь впервые использует cli, создайте папку в корневом пути ~.env/, сохраните там файл env, который содержит пароль, который можно найти позже, правила обновления все еще применяются. Вот буквально так работают инструменты aws cli.

mwalto7
8 апреля 2018 в 23:55
0

@reticentroot Я попытался сохранить хешированный пароль в файле env, но тогда у меня нет возможности сравнить пароль пользователя с хешированным паролем без запроса пользователя. Я бы не хотел хранить чей-либо пароль в виде простого текста в файле или переменной env.

reticentroot
8 апреля 2018 в 23:59
0

@mwalto7 mwalto7 Можете ли вы использовать удаленную конфигурацию? Таким образом, ключ к хешированию доступен везде? Я также не вижу способа использовать пароли иначе. Это либо БД, в которую они попали, либо она хранится локально в их собственных ящиках, как и другие конфигурации. Если вы хотите, чтобы пароли были более безопасными, сохраните их в env с правильными разрешениями, чтобы пользователь должен был использовать sudo для их чтения. Есть несколько бесплатных БД, которые вы можете использовать в режиме песочницы, если на то пошло.

Ответы (0)