Intereting Posts
socat duplicate stdin для каждого подключенного клиента Установка клиента PostgreSQL (psql) только на CentOS Одновременное чтение / запись в один и тот же Unix-сокет? Как переместить строку в текстовый файл вверх или вниз на одну строку? obfsproxy не удается построить, потому что он не может найти event2 / util.h Что такое эквивалент FreeBSD «read -n»? Сервер Apache разрешает доступ из локальной сети Печать строк с нечетными номерами, печать строк с четными номерами Escape-последовательности с «echo -e» в разных оболочках Почему OOM-killer не регистрирует данные, чтобы быть видимыми через dmesg? Значение цветов в htop Я удалил / boot-сервер, который все еще работает, переустанавливается? Почему существуют заглавные буквы в пакетах openSUSE? Почему я не могу использовать тот же каталог для httpd.conf для CentOS и FreeBSD? Кнопки панели Xfce не сводят к минимуму окна, когда фокус следует за мышью

Как я могу заставить программу unix `pass` играть хорошо с` ssh` внутри виртуального терминала Linux?

Я пытаюсь войти в ssh-сервер, вытаскивая пароль непосредственно из pass программы без какого-либо взаимодействия с графическим интерфейсом.

Обычный рабочий процесс в GUI (Gnome) заключается в следующем.

  1. Потяните пароль в буфер обмена: pass -c Misc/MyAccount
  2. Сделайте программу ssh и вставьте ее с помощью буфера обмена GUI

     ssh myserver Right-Click + Paste 

Поскольку я хотел сделать это без компонента GUI, я подумал, что могу сделать что-то вроде этого

  pass Misc/MyAccount | ssh myserver 

Очевидно, что это не работает, потому что ssh не запрашивает пароль от stdin . Я нашел этот вопрос и создал вместо него следующий скрипт.

 export SSH_ASKPASS="/path/to/script/calling/pass" setsid ssh "myserver" 

Это отлично работает, когда я запускаю его внутри gnome-terminal внутри GUI.

Однако он не работает в виртуальном терминале Linux (из Control-Alt-F1), потому что запрос пароля для pass не может всплывать, как обычно (непосредственно в терминале), поэтому логин просто терпит неудачу.

Как я могу сделать эту работу на виртуальном терминале Linux?

Желаемое поведение

  1. Запустите вышеупомянутый скрипт.
  2. См. Подсказку пароля для программы pass .
  3. Успешно войдите в систему без ручной ввода пароля на сервер ssh .

    Есть некоторые требования, чтобы заставить его работать:

    • Для активации функции SSH_ASKPASS вам нужно установить что-нибудь (что-нибудь будет делать) в переменной среды DISPLAY .
    • Вам нужна программа gpg-agent и tit -based pinentry . В системах Debian / Ubuntu запустите apt-get install pinentry-curses и используйте /usr/bin/pinentry-curses .

    Запустите скрипт следующим образом:

     export DISPLAY=anything export SSH_ASKPASS="/path/to/script/calling/pass" gpg-agent --pinentry-program /usr/bin/pinentry-curses --daemon setsid ssh myserver 

    Обратите внимание, что setsid of util-linux в последних дистрибутивах (Debian 8.0 или новее, Ubuntu 14.10 или новее) нужно -w ждать завершения субпроцесса, иначе вы будете путать с сеансом ssh, работающим в фоновом режиме.

     gpg-agent --pinentry-program /usr/bin/pinentry-curses --daemon setsid -w ssh myserver