Скажите SSH использовать графическую подсказку для ключевого пароля

ОБНОВЛЕНИЕ: это awk сценарий может быть больше, что Вы ищете:

awk -vRS='\r\n ' -vORS= 1 contacts.vcf 

(исходное сообщение)
Это perl работы сценария, хотя это на самом деле длиннее, даже когда sed растянут немного; и это вполне, очевидно, логически очень похоже на sed. Возможно, perl читает файл в память быстрее(?), поскольку это не имеет этого или является этим не 1-я строка? иметь дело с...

  perl -e 'undef $/; $_=<>; s/\r\n //g; print' contacts.vcf 
#          |         |      |           |
#          ignore    get    substitute  print
#          newlines  all    as needed   result
#          |         |      |           |
# sed -n '1h; 1!H; ${g;     s/\r\n //g; p}' contacts.vcf  

С другой стороны: чтобы не быть остроумным, но если Вы не можете прочитать sed сценарий легко и он работает, просто сделайте его читаемым. Я не могу прочитать sed сценарий как этот! Синдром остроты просто не подходит для sed сценариев, которые идут вне простой замены... sed больше похож на текстовый ассемблер, чем язык сценариев высокого уровня... perl является довольно загадочным также, но это имеет тенденцию делать большие вещи со своим кратким синтаксисом.

sed -n '
    1h            # if 1st line, copy the pattern space to the hold space
    1!H           # if NOT 1st line, append the pattern to the hold space
    ${            # if this is the last line
      g           # overwrite current pattern with accumulated patterns from hold space
      s/\r\n //g  # make required substitutions
      p           # print the final result. 
    }' contacts.vcf
42
23.07.2013, 02:17
4 ответа

Это не может быть сделано в текущем OpenSSH: существует проблема, открытая в OpenSSH Bugzilla, просящем эту функцию по состоянию на 2013-07: Обобщите SSH_ASKPASS.

9
27.01.2020, 19:35
  • 1
    Это не предоставляет ответ на вопрос. Чтобы критиковать или запросить разъяснение от автора, оставьте комментарий ниже их сообщения. –  cuonglm 13.10.2015, 04:30
  • 2
    @cuonglm "это не возможно", ответ. Это могло бы быть неправильным или вводящим в заблуждение (я не говорю, что это), но это - все еще ответ. –  terdon♦ 22.10.2015, 17:04

1. - Недостающий пакет?

Вы, вероятно, пропускаете пакет, который содержит ssh-askpass. Попытайтесь установить его.

Fedora/CentOS/RHEL:

$ sudo yum install openssh-askpass

Debian/Ubuntu:

$ sudo apt-get install ssh-askpass-gnome ssh-askpass

Нахождение недостающих утилит

Можно искать недостающие инструменты с помощью этих команд:

Fedora/CentOS/RHEL:

$ yum search ssh-askpass
Loaded plugins: langpacks, presto, refresh-packagekit
Adding en_US to language list
======================================================= Matched: ssh-askpass =======================================================
x11-ssh-askpass.x86_64 : A passphrase dialog for X and not only for OpenSSH
ksshaskpass.x86_64 : A KDE version of ssh-askpass with KWallet support
connect-proxy.x86_64 : SSH Proxy command helper
openssh-askpass.x86_64 : A passphrase dialog for OpenSSH and X

Debian/Ubuntu:

$ apt-file -l search ssh-askpass
app-install-data
cruft
git-cola
luckybackup-data
pssh
sdm-terminal
seahorse
ssh-askpass
ssh-askpass-fullscreen
ssh-askpass-gnome

2. - Разъединенный терминал?

Я пропустил это первоначально, но после дополнительных материалов для чтения я заметил этот комментарий в странице справочника ssh относительно SSH_ASKPASS переменная среды.

выборка

SSH_ASKPASS    If ssh needs a passphrase, it will read the passphrase from the 
               current terminal if it was run from a terminal.  If ssh does not
               have a terminal associated with it but DISPLAY and SSH_ASKPASS 
               are set, it will execute the program specified by SSH_ASKPASS 
               and open an X11 window to read the passphrase. This is particularly
               useful when calling ssh from a .xsession or related script.  
               (Note that on some machines it may be necessary to redirect the 
               input from /dev/null to make this work.)

Если Вы замечаете в комментарии, он указывает, что ssh "не имеет терминала связанным" И DISPLAY & SSH_ASKPASS установлены. Замечание этого является ключевым. Таким образом добираться ssh использовать SSH_ASKPASS мы должны добраться ssh не иметь терминал (иначе. STDIN & STDOUT) присоединенный к нему.

Один способ сделать это путем использования команды setsid. Не плохо себя чувствовать. Я никогда не слышал об этом инструменте также. Из страницы справочника:

setsid - запустите программу на новой сессии

Таким образом, если мы работаем ssh как "программа" к setsid мы можем отсоединиться ssh от нашего терминала, соответствующего критериям, упомянутым в sshстраница справочника. Другие критерии установлены следующим образом:

$ echo $DISPLAY; echo $SSH_ASKPASS
:0.0
/usr/libexec/openssh/ssh-askpass

Таким образом, если мы помещаем это все вместе:

$ setsid ssh user@remotehost

Например:

$ setsid ssh user@skinner

                                       ss of ask gui

Решение

Если требуется сделать его так, чтобы setsid "встроено", можно создать псевдонимы как так:

$ alias ssh="setsid ssh"

Теперь, когда Вы ssh Вы получите GUI появление просьбы о Вашем пароле:

$ ssh user@skinner

Ссылки

33
27.01.2020, 19:35
  • 1
    ssh-askpass установлен, и это хорошо работает, если запущено вручную. спасибо –  gioele 23.07.2013, 02:14
  • 2
    @gioele - видят обновления, я думаю, что понял это. –  slm♦ 23.07.2013, 04:29
  • 3
    , которым проблема этого решения состоит в том, что это требует, чтобы я изменил каждого мерзавца или команду rsync для использования setsid ssh instad плоскости ssh. –  gioele 23.07.2013, 11:16
  • 4
    @gioele - Вы попросили метод "вызывать" пароль GUI, это обеспечивает это. Можно заменить команды такой как ssh с псевдонимами setsid ssh один подход. Существуют другие пути. Ограничивающим фактором являются потребности openssh никакой TTY, присоединенный для активации ASK_SSHPASS. –  slm♦ 23.07.2013, 12:08
  • 5
    я не пропускаю пакет и я не могу использовать setsid и затем работа в ssh от моего терминала. Это - просто не действительный ответ вообще!? Плюс, это работало в более старых версиях Ubuntu, таким образом, я не слишком уверен, что понимаю, почему это внезапно прекратило работать! –  Alexis Wilke 30.11.2014, 07:40

У меня была та же проблема, когда я установил морского конька (которые обеспечивают seahorse-ssh-askpass) не устанавливая пакет gnome-keyring на ArchLinux.

Рассмотрение содержания этого пакета gnome-keyring (https://www.archlinux.org/packages/extra/i686/gnome-keyring), может помочь Вам решить свою проблему.

В любом случае, если Вы не возражаете использовать морского конька, можно также установить пакеты seahorse и gnome-keyring (или эквивалентные для Вашего распределения). Если Вы не используете Gnome, дополнительные шаги могут требоваться: https://wiki.archlinux.org/index.php/GNOME_Keyring.

0
27.01.2020, 19:35

Есть способ закрыть терминал для одной команды, и это использование перенаправления файлов:

ssh-add > /dev/null < /dev/null 2>&1

Это запустит команду ssh-add с закрытым терминалом. Все хорошо, за исключением сложности. Но теперь, когда вы знаете правильную команду, просто сделайте ее псевдонимом и добавьте в ~/.bash_aliases:

alias ssh-add="/usr/bin/ssh-add > /dev/null < /dev/null 2>&1"

И все готово. Просто набрав ssh-add, вы вызовете псевдоним, который вызовет настоящую команду со всеми перенаправлениями.

Команда ssh-add теперь правильно спрашивает пароль в диалоговом окне... При условии, что у вас установлен один из этих пакетов (в Ubuntu или производных, в других местах они могут иметь другие названия):

  • ssh-askpass
  • ssh-askpass-fullscreen
  • ssh-askpass-gnome
  • ksshaskpath
  • kwalletcli
  • lxqt-openssh-askpass
  • razorqt-openssh-askpasss

Итак, что все это значит?

Команда 2>&1 означает перенаправление дескриптора файла №2 (стандартная ошибка) туда же, куда перенаправляется дескриптор файла №1 (стандартный вывод).

Команда > /dev/null означает перенаправление стандартного вывода в /dev/null, который представляет собой специальный файл, отбрасывающий все записанные в него данные.

Команда < /dev/null означает перенаправление стандартного ввода в /dev/null (idem).

В качестве побочного примечания, и не по теме, но связанного с этим, если вы когда-нибудь захотите программировать службу в bash, вы должны помнить, что такое служба на самом деле, процесс со стандартным вводом, выводом и закрытой ошибкой, который находится в фоновом режиме:

service > /dev/null < /dev/null 2>&1 &

Обратите внимание, что единственным отличием является &, добавленный в конце (плюс тот факт, что я изменил команду ssh-add на теоретическую service. Эти команды правильно поставят службу на фон.

5
27.01.2020, 19:35

Теги

Похожие вопросы