Emacs / CVS / OpenSSH: предотвращение всплывающего пароля - PullRequest
8 голосов
/ 14 июля 2010

Я использую GNU Emacs на моем нетбуке Ubuntu в полноэкранном режиме. Когда я редактирую файлы, которые находятся под контролем версий, и нажимаю C-x v v, чтобы зафиксировать последние изменения, откроется всплывающее окно OpenSSH и спросит у меня пароль для сервера, на котором живет мой репозиторий.

К сожалению, из-за полноэкранного режима всплывающее окно не появляется, и я не могу ввести свой пароль. Но это все еще как-то модально, так что я также не могу вернуться к emacs и, скажем, также выйти из полноэкранного режима (или сделать что-нибудь еще, например C-g). Я в основном в ловушке.

Как пользователь emacs, я считаю, что идея всплывающих окон в любом случае отвратительна ;-) в идеале, мне бы хотелось, чтобы в минибуфере запрашивался пароль ssh. Как я могу настроить мои настройки, чтобы это произошло? (Я предпочитаю каждый раз вводить пароль вместо сохранения пары ключей в ~ / .ssh /).

Ответы [ 6 ]

7 голосов
/ 14 июля 2010

Вы можете использовать ssh-agent до запуска emacs (или в другой оболочке).

1 голос
/ 16 июня 2011

При поиске моего основного ответа (выше) я наткнулся на psvn для emacs.См. Этот вопрос / ответ для более подробной информации: SVN для Emacs: как задать имя автора и сохранить пароль?

Я подумал, что вам также может быть полезно узнать о psvn, но я думаюодин из них о настройке значения PreferredAuthentications для SSH более непосредственно применим к вопросу, который вы изначально задавали.

1 голос
/ 16 июня 2011

Попробуйте установить это как-нибудь в своей среде:

export CVS_RSH='ssh -o PreferredAuthentications="password"'

Это должно заставить его прекратить попытки аутентификации publickey, что также подавит отображение графического ssh-askpass. Это работает путем указания команды SSH, которую CVS будет использовать для подключения к удаленному серверу. Обратите внимание, что это будет применяться ко всем командам CVS, запускаемым из контекста, в котором вы устанавливаете переменную среды.

Возможно, вы также захотите настроить его в ~/.ssh/config. Вы можете установить параметры для каждого хоста отдельно. Вот страница, которая примерно показывает, как , хотя для принудительной аутентификации publickey. Обратите внимание, что это повлияет на использование SSH для вашей учетной записи пользователя, а не только для CVS. Это вполне может быть то, что вы ищете, так как вы предпочитаете избегать аутентификации publickey. Вот пример блока, который вы добавили бы в ~/.ssh/config:

Host cvs

  Hostname cvs.your.corp
  User yourCVSusername
  PreferredAuthentications password

Кроме того, вы можете изменить Host cvs на Host cvs.your.corp, если ваши существующие средства доступа к нему используют полное доменное имя, а не просто имя хоста.

Наконец, вы можете получить файл ~/.ssh/config только одной строкой (или добавить его в начало существующего):

PreferredAuthentications password

Это позволит применить это правило ко всем SSH-соединениям с удаленными хостами.

Удачи. Я надеюсь, что это выведет вас из модальной диалоговой ловушки.

1 голос
/ 13 июня 2011

Вы можете заставить ssh мультиплексировать все новые соединения с сервером через существующие соединения.Это означает, что пока вы открываете ssh-соединение (скажем, в оболочке), новые соединения с тем же удаленным хостом не будут запрашивать пароль.Я использую

Host *
    ControlPath ~/.ssh/master-%r@%h:%p
    ControlMaster auto
    ServerAliveInterval 30

в ~ / .ssh / config, чтобы настроить это.

1 голос
/ 16 июля 2010

Вероятно, запускается программа ssh-askpass, которая, я думаю, смотрит на переменную окружения DISPLAY, чтобы решить, как запросить пароль.Если установлено, то появляется всплывающее графическое окно, а если нет, то запрашивается TTY.

Если подсистема vcs обнаруживает, когда у пользователя запрашиваются пароли (что вероятно), то возможно, что вы можете отменить$ DISPLAY для подпроцессов:

(setenv "DISPLAY" nil)

Однако это может иметь и другие негативные побочные эффекты, поэтому также проверьте "man ssh-askpass" на случай, если что-то там может помочь.

(Отказ от ответственности: Я лично использую решение на основе ssh-agent, которое я настоятельно рекомендую.)

1 голос
/ 15 июля 2010

Я размышляю здесь, поскольку я не использую CVS или vc в Emacs, однако я предполагаю, что Emacs отправляет соответствующую программу для выполнения коммита, и запрос пароля является чем-то совершенно внешним для Emacs. Поэтому я подозреваю, что вы хотите сначала выяснить, какие опции необходимы для выполнения коммитов без графического интерфейса из вашей оболочки без Emacs, а затем изменить vc-checkin-switches (или определить vc-cvs-checkin-switches) в Emacs для соответствия (смотрите defun vc-switches).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...