git производит Gtk-WARNING: не может открыть дисплей

138

Я работал над своим проектом удаленно через командную строку на машине, на которую у меня нет прав администратора, и после запуска git push origin masterя получаю следующее сообщение об ошибке:

(gnome-ssh-askpass:29241): Gtk-WARNING **: cannot open display:

Мой .git/configфайл имеет следующее содержимое:

    [core]
       repositoryformatversion = 0
       filemode = true
       bare = false
       logallrefupdates = true 
    [remote "origin"]
       fetch = +refs/heads/*:refs/remotes/origin/*
       url = https://username@github.com/username/repository.git 
    [branch "master"]
       remote = origin
       merge = refs/heads/master

Я получал ошибку 403 ранее. После комментария здесь , я кладу имя перед знаком @ в удаленном URL и с тех пор я получаю сообщение об ошибке Gtk.

Когда я вхожу в машину с помощью ssh -Xи пытаюсь нажать, я получаю следующую ошибку:

X11 connection rejected because of wrong authentication.
(gnome-ssh-askpass:31922): Gtk-WARNING **: cannot open display:localhost:10.0

Если я изменю URL-адрес пульта дистанционного управления на git@github.com:username/repository.git, то ошибка:

ssh: connect to host github.com port 22: Connection timed out
fatal: The remote end hung up unexpectedly

Вы знаете, как это исправить?

Джон Манак
источник
2
Я полагаю, вы используете SSH. Вместо этого используйте ssh -X. Это означает, что диалоговое окно с паролем пытается открыть, но не может, потому что нет X.
Позитрон
Спасибо, но я не использую ssh явно, просто звоню git push origin master, так что я не знаю, как применить то, что вы говорите?
Джон Манак
Могу ли я узнать, откуда вы нажимаете на сервер? Я имею ввиду с какой машины? Как вы вошли в эту машину?
Позитрон
1
К сожалению. Сожалею. Я не полностью прочитал ваш вопрос. Ваш «URL» должен быть git@github.com:username/repo.gitлибо « https://github.com/username/repo.gitНо вы используете смесь обоих».
позитрон
Ой, прости, я понял, что ты имеешь в виду сейчас. Я попытался войти в систему с помощью компьютера ssh -X, но это тоже не помогло. Смотрите обновленный вопрос выше.
Джон Манак

Ответы:

336

Я наконец-то нашел решение проблемы. Как это было описано здесь , я запустил следующую команду в терминале:

  unset SSH_ASKPASS

и тогда бег git push origin masterработает так, как должен. Вы также можете добавить строку в свой .bashrcфайл.

Джон Манак
источник
5
Спасибо ... это сэкономило много времени. Благослови вас
Poonam Bhatt
Спасибо за это! :-)
ИтайБ
1
Спасибо .. это сработало для меня! Я получал похожую ошибку при попытке клонировать с bitbucket на машину linux.
Благослови Хосе
2
Просто хотел добавить, что именно этот скрипт устанавливал эту переменную в моей системе CentOS 6.7: /etc/profile.d/gnome-ssh-askpass.sh
hshib
Теперь я получаюerror: RPC failed; result=22, HTTP code = 417
pmiranda
19

Я недавно имел дело с этим поведением на машине RedHat 5, где наша версия Git была 1.7.4.1.

У меня не было высокой степени уверенности, unset SSH_ASKPASSкоторая не имела бы непредвиденных последствий, поэтому я хотел посмотреть, есть ли другое решение.

Я не могу сказать наверняка, но кажется, что патч для этой проблемы был в разработке примерно в то же время, когда была опубликована наша версия Git. Таким образом, мне показалось разумным надеяться, что более свежая версия исправит поведение.

И это действительно так. Обновление до ветки 1.8 Git решило проблему. Сообщение об ошибке по-прежнему отображается по какой-то странной причине, но вы правильно запросили пароль и можете продолжить.

eikonomega
источник
2
Проблема в RHEL 5 (CentOS 5 и т. Д.) Находится в файле /etc/profile.d/gnome-ssh-askpass.sh (принадлежит пакету openssh-askpass), где переменная окружения SSH_ASKPASS слепо установлена ​​в / usr / libexec / openssh / gnome-ssh-askpass, и это не работает, если X отсутствует (т. е. вошел через PuTTY через SSH). Вы можете просто закомментировать строку в этом файле (не удаляйте файл, иначе он будет восстановлен после обновления пакета openssh-askpass). Или полностью удалите пакет openssh-askpass (yum удалить openssh-askpass).
Милан Керслагер
0

Ни один из этих ответов не сработал для меня (ssh'ing через Cygwin под Windows 10 на сервер RHEL 6.8 и попытка клонировать репозиторий github.com из коробки RHEL), так что я сделал клонирование через ключ SSH, а не имя пользователя HTTPS / пароль. например, я использовал git@github.com: MyUsername / myproject.git, а не https url. Я также соответствующим образом загрузил свой открытый ключ в Github. Этот метод работал нормально.

Примечание. Из вышеперечисленных решений я фактически не пробовал обновлять ветку git до версии 1.8.

johnsimer
источник
0

Вы также можете попытаться войти с помощью ssh -Y на удаленный сервер, чтобы диалоговое окно могло отображаться графически.

Как и OP, вход через ssh -X не работал. При попытке нажать, сервер просто повторил то же сообщение об ошибке -(gnome-ssh-askpass:29241): Gtk-WARNING **: cannot open display: отправки что и при входе через ssh без пересылки X11. Это немного отличается от того, что сообщал OP, когда он пытался использовать ssh -X, поскольку его сообщение об ошибке немного изменилось по сравнению с использованием ssh.

Тем не менее, для меня, однажды войдя в систему с помощью ssh -Y: ошибки не было, всплыло диалоговое окно с паролем, я ввел пароль, и GitHub принял push.

Как предупреждение, ssh -Y может открыть проблемы безопасности, когда вы рассматриваете удаленный сервер как доверенного клиента ( /ubuntu/35512/what-is-the-difference-between-ssh-y- доверенный-x11-forwarding-and-ssh-xu ). Так что будьте осторожны при использовании.

cr_dave
источник