Как пользователь root я подключаюсь к удаленному хосту для выполнения команды. Только "standarduser" имеет соответствующий id-файл и правильный .ssh / config, поэтому я сначала переключаю пользователя:
su standarduser -c 'ssh -x remotehost ./remotecommand'
Команда работает нормально, но, несмотря на то, что я использовал «-x» (отключить пересылку X11) и отключил X11Forwards /etc/ssh/ssh_config
, я все равно получаю сообщение об ошибке:
X11 connection rejected because of wrong authentication.
Я не получаю сообщение об ошибке, когда я вошел как "standarduser".
Это довольно раздражает, так как я хотел бы интегрировать команду в файл задания cron. Я понимаю, что сообщение об ошибке относится к неверной аутентификации корневого файла .XAuth, но я даже не пытаюсь подключиться через X11.
Почему «ssh -x» не отключает соединение X11 и не выдает сообщение об ошибке?
ОБНОВЛЕНИЕ : сообщение отображается только когда я вошел в систему на экране, при использовании команды, указанной выше, на самой локальной машине (без экрана), я не получаю сообщение об ошибке, так что это должно быть хорошо с cron, тоже ,
Я также запустил ту же команду -v
и неожиданно получил сообщение об ошибке FIRST, даже до получения информации о состоянии из SSH:
root@localhost:~# su standarduser -c 'ssh -x remotehost ./remotecommand'
X11 connection rejected because of wrong authentication.
OpenSSH_6.2p2 Ubuntu-6ubuntu0.1, OpenSSL 1.0.1e 11 Feb 2013
Это привело меня к самой проблеме, это не то, ssh
что выдает сообщение об ошибке, это su
:
root@localhost:~# su standarduser -c 'echo Hi'
X11 connection rejected because of wrong authentication.
Hi
Почему я получаю только эту ошибку внутри screen
? Как я могу отключить это сообщение об ошибке?
источник
-v
к ssh параметры, затем вставьте вывод в ваш вопрос.Ответы:
Похоже, вашему корню не хватает какого-то волшебного печенья X11 в том
.Xauthority
, что у васstandarduser
есть. Вот как это исправить.КОРОТКАЯ ВЕРСИЯ (спасибо @bmaupin )
Внимание: проверьте галочки! Их нельзя заменить кавычками! Вам нужно
sudo
установить, чтобы продолжить дальше вторая команда!ОРИГИНАЛЬНАЯ ДЛИННАЯ ВЕРСИЯ
Чтобы исправить ситуацию, сначала определите, какой номер дисплея
standarduser
использует:В этом случае это так
21.0
. Во-вторых, отобразитьstandarduser
список файлов cookie:Файл cookie для
21.0
дисплея является вторым в списке и заканчивается на104f
.Последнее, что нужно сделать, это добавить этот файл cookie в корневой каталог
.Xauthority
. Войдите в систему как пользователь root и сделайте следующее:Вот как вы можете уменьшить
X11 connection rejected because of wrong authentication
ошибку, когда вы запускаетеsu
другого пользователя в скрипте Bash илиscreen
.Спасибо этому парню за вдохновение.
источник
Более простое решение:
1.-
ssh user@host
2.-
$ sudo su
3.-
# xauth merge /home/user/.Xauthority
Вот и все
Конечно,
$DISPLAY
переменная должна быть установлена.источник
$DISPLAY
переменную? Я верю, что это небольшое дополнение добавит дополнительные голоса к вашему ответу.xauth: file /root/.Xauthority does not exist
Мои потребности немного отличались, поэтому я нашел немного другое решение. Мне нужна была возможность запустить приложение X11 от имени другого пользователя (который не является пользователем root). Запуск CentOS, так что у меня нет сладкого инструмента gksudo, который есть у счастливых собак с ubuntu, который делает магию Xauth.
Я действительно не хотел запускать некоторые пользовательские скрипты только для входа в систему, переключения пользователей и запуска приложения; это кажется немного излишним для меня.
Шаг первый:
Разрешить перенос $ XAUTHORITY между сеансами sudo.
Добавьте эту строку под остальными операторами env_keep в / etc / sudoers:
Шаг второй:
Позвольте вашему целевому пользователю возможность читать ваш .Xauthority (да, я знаю, кричать БЕЗОПАСНОСТЬ! Все, что вы хотите). Для тех, кто просто хочет запускать команды от имени root, это можно пропустить.
Целевой пользователь имеет ту же группу, что и я, поэтому я просто включаю права на чтение группы:
Шаг третий:
CentOS не заполняет значение $ XAUTHORITY по умолчанию. Добавьте строку в свой профиль (у меня ~ / .bash_profile):
Вот и все. Нет больше настройки. Не надо писать .XML, чтобы заставить PolicyKit работать. Нет запущенных скриптов для каждого логина. Нет необходимости дважды судить, чтобы скопировать xauth. С этого момента вы можете просто:
Прекрасно работает с MobaXTerm.
источник
Вы должны полностью переключиться на целевого пользователя, т.е. использовать "
-
" сsu
(su - standarduser ...
). Если нет, то root-файлы X будут перемещаться в среде.источник
Поскольку я часто выполняю root-доступ к сетевому файлу общего доступа, ни одно из перечисленных выше решений не работает для меня. (xubuntu 14.04). Я собрал следующий скрипт, который работает в моей системе. Это может работать на вашем. Опять же, это не так, но это можно попробовать бесплатно ...
Предполагается, что я ssh'd с помощью опции -Y.
источник
cookie=$(xauth list|grep $h.*$port)
может соответствовать больше, чем предполагалось, если $ port окажется частью значения cookie. Безопаснее это:cookie=$(xauth list) cookie=${c%% *}
илиcookie=$(xauth list |grep $h[^ ]*$port)
.В моем случае, когда я столкнулся с этой ошибкой, у меня был зашифрованный каталог пользователя. После звонка
ecrypt-mount-private
он избавился от ошибки и позволил мне продолжить пересылку X11.Для того, чтобы определить , является ли ваша домашняя папка зашифрованы, вы можете попробовать это (как за этот ответ ):
ls -A /home
. Если вы видите.ecryptfs
папку, то ваш домашний каталог, вероятно, зашифрован, и в этом случае вы можете попробовать выполнить команду, указанную в начале ответа.источник