№ 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
к нему не был подключен терминал (aka. 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
Решение
Если вы хотите, чтобы он был setsid
«встроенным», вы можете создать псевдонимы так:
$ alias ssh="setsid ssh"
Теперь, когда вы ssh
получите графический интерфейс, запрашивающий ваш пароль:
$ ssh user@skinner
Ссылки
setsid ssh
instad из plainssh
.ssh
псевдонимы,setsid ssh
это один из подходов. Есть и другие способы. Ограничивающим фактором является то, что openssh не требует присоединения TTY для активации ASK_SSHPASS.setsid
а затем работатьssh
с моего терминала. Это просто неверный ответ !? Кроме того, он работал в старых версиях Ubuntu, поэтому я не уверен, что понимаю, почему он вдруг перестал работать!Это невозможно сделать в текущем OpenSSH: в OpenSSH Bugzilla существует проблема, требующая этой функции по состоянию на 2013-07: обобщить SSH_ASKPASS .
источник
Существует способ закрыть терминал для одной команды, используя перенаправление файлов:
Это запустит команду
ssh-add
с закрытым терминалом. Что хорошо и модно, за исключением его сложности. Но теперь, когда вы знаете правильную команду, просто сделайте ее псевдонимом и добавьте ее в~/.bash_aliases
:И вы должны быть установлены. Простой ввод
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
(там же).В качестве дополнительного примечания и не по теме, но связанного примечания, если вы когда-нибудь захотите запрограммировать службу в bash, вы должны помнить, что такое служба на самом деле, процесс со стандартным закрытием ввода, вывода и ошибки, который находится в фоновом режиме:
Обратите внимание, что единственное отличие заключается в добавлении & в конце (плюс тот факт, что я изменил команду
ssh-add
на теоретическуюservice
. Эти команды будут корректно помещать службу в фоновом режиме.источник
ssh
функционирует точно так же, и тот же ответ, который я дал ранее, все еще применяется. Просто замените каждый случайssh-add
с,ssh
и вы настроены.ssh-add
меня - мне даже не нужно было перенаправлять stdout / stderr, чтобы получить желаемое поведение, которое должно было вызватьssh-askpass
программу. (То естьssh-add < /dev/null
было достаточно.)У меня была такая же проблема, когда я установил морского конька (который предоставляет
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 .источник