Как автоматизировать расшифровку файлов GPG через SSH?
Я хотел бы использовать GnuPG для расшифровки коротких сообщений, которые хранятся на удаленном хосте (под управлением Linux), а именно:
ssh [<user>@]<host>
gpg -d <file-to-decrypt>
- взаимодействовать с gpg-agent и / или просто ввести пароль
- закрыть SSH соединение
но более автоматизированным способом. Я просто хочу набрать одну команду, а скрипт должен сделать все остальное (кроме (интерактивного) ввода пароля), то есть:
remote-gpg [<user>@]<host> <file-to-decrypt>
- [запросить пароль, не возвращая его в открытом тексте]
- [сбросить расшифрованный текст на стандартный вывод] И закрыть соединение SSH
Моя главная задача - объединить шаги "ssh" и "gpg".
Я ищу простой и эффективный способ добиться этого:
- с минимальными зависимостями на стороне клиента (в идеале, просто
ssh
+ основные утилиты) - без особых проблем с сокетами и трубами на стороне сервера
- без предположения о том,
gpg-agent
работает на сервере
Таким образом, такие решения, как написание GNU expect
Сценарий не может быть рассмотрен.
Мотивация. Типичным вариантом использования телефона (под управлением Android) является получение зашифрованного сообщения (например, пароля) с удаленного сервера. Закрытие соединения при доставке информации желательно, потому что вы можете забыть выйти из системы до того, как ваш телефон будет потерян / украден, и вор не сможет получить дополнительную информацию, не угадав пароль (так как пароль запрашивается каждый раз). Наконец, удаление SSH-ключа вашего телефона из файла author_keys на сервере - это все, что нужно для предотвращения нарушения безопасности.
Кстати, будут ли какие-либо дополнительные риски для безопасности при таком подходе (по сравнению с четырехступенчатым ручным процессом)?
2 ответа
ssh -t user@host gpg -d file
Я не думаю, что это должно быть сложнее, чем это.
Расшифрованный вывод будет возвращен на ваш терминал. -t
опция просит ssh запросить tty, который необходим для того, чтобы gpg мог запросить пароль на вашем терминале.
Это кажется не более или менее безопасным для меня, чем ваш четырехшаговый метод.
Tldr вы хотите, чтобы кто-то написал код для вас. К счастью для вас, у меня уже есть нечто подобное.
decrypt.sh:
#!/bin/bash
# Get our original tty and turn off -echo
stty_orig=`stty -g` stty -echo
read Pass
# type in your pass for gpg.
gpg --passphrase="$Pass" --no-tty -d $1
# Output goes to STDOUT
stty $stty_orig
Позвоните по:
ssh -t user@host 'decyrpt.sh File'
Допущения: ваш файл находится в домашнем каталоге, а файл decrypt.sh - в вашем $PATH.