Como root, estou me conectando a um host remoto para executar um comando. Somente "standarduser" possui o arquivo de identificação apropriado e o arquivo .ssh / config correto, portanto, troco o usuário primeiro:
su standarduser -c 'ssh -x remotehost ./remotecommand'
O comando funciona bem, mas, apesar de eu ter usado "-x" (desativar o X11-Forwarding) e ter o X11Forwards desativado /etc/ssh/ssh_config
, ainda recebo a mensagem de erro:
X11 connection rejected because of wrong authentication.
Não estou recebendo a mensagem de erro quando estou logado como "usuário padrão".
Isso é muito chato, pois eu gostaria de integrar o comando em um arquivo de tarefa cron. Entendo que a mensagem de erro se refere à autenticação incorreta do arquivo .XAuth da raiz, mas nem estou tentando conectar-me via X11.
Por que "ssh -x" não está desativando a conexão X11 e está lançando a mensagem de erro?
ATUALIZAÇÃO : A mensagem é exibida apenas quando estou logado em uma tela. Ao usar o comando indicado acima na máquina local (sem tela), não recebo uma mensagem de erro, portanto, isso também deve funcionar com o cron. .
Também iniciei o mesmo comando -v
e, surpreendentemente, recebi a mensagem de erro PRIMEIRO, mesmo antes das informações de status do 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
Isso me levou ao problema em si, NÃO é o ssh
que está lançando a mensagem de erro, é su
:
root@localhost:~# su standarduser -c 'echo Hi'
X11 connection rejected because of wrong authentication.
Hi
Por que só recebo esse erro dentro screen
? Como posso desativar esta mensagem de erro?
fonte
-v
às opções ssh e cole a saída na sua pergunta.Respostas:
Parece que sua raiz não possui um cookie mágico X11 no
.Xauthority
, que vocêstandarduser
possui. Aqui está como corrigir isso.VERSÃO CURTA (graças a @bmaupin )
Atenção: verifique os backticks! Eles não podem ser substituídos por aspas! Você precisa estar
sudo
instalado para continuar o segundo comando!VERSÃO LONGA ORIGINAL
Para consertar as coisas, primeiro detecte qual número de exibição
standarduser
usa:Nesse caso é
21.0
. Em segundo lugar,standarduser
a lista de cookies da tela :O cookie para a
21.0
exibição é o segundo da lista e termina com104f
.A última coisa a fazer é adicionar esse cookie específico à raiz
.Xauthority
. Efetue login como root e faça o seguinte:É assim que você pode atenuar o
X11 connection rejected because of wrong authentication
erro ao executarsu
como um usuário diferente no script Bash ouscreen
.Obrigado a esse cara pela inspiração.
fonte
Uma solução mais fácil:
1.-
ssh user@host
2.-
$ sudo su
3.-
# xauth merge /home/user/.Xauthority
Isso é tudo
É claro que a
$DISPLAY
variável deve ser definida.fonte
$DISPLAY
variável? Acredito que este pequeno acréscimo trará vozes adicionais à sua resposta.xauth: file /root/.Xauthority does not exist
Minhas necessidades eram um pouco diferentes, então eu vim com uma solução um pouco diferente. Eu precisava da capacidade de executar um aplicativo X11 como outro usuário (que não é root). Rodando o CentOS, não tenho a ferramenta gksudo que os cães sortudos do ubuntu têm, o que faz a mágica do Xauth.
Eu realmente não queria quebrar alguns scripts personalizados apenas para fazer login, alternar entre usuários e executar um aplicativo; isso parece um pouco supérfluo para mim.
Passo um:
Permita que $ XAUTHORITY seja carregado entre sessões sudo.
Inclua esta linha no restante das instruções env_keep em / etc / sudoers:
Passo dois:
Permita ao usuário alvo a capacidade de ler sua .Xauthority (sim, eu sei, grite SEGURANÇA! Tudo o que você quiser). Para aqueles que querem apenas a capacidade de executar comandos como root, isso pode ser ignorado.
O usuário de destino compartilha o mesmo grupo que eu, para ativar as permissões de leitura do grupo:
Passo três:
O CentOS não preenche o valor de $ XAUTHORITY por padrão. Adicione uma linha ao seu perfil (o meu é ~ / .bash_profile):
É isso aí. Não há mais ajustes. Não é necessário escrever .XML para que o PolicyKit funcione. Não há scripts em execução para cada login. Não é necessário sudo duas vezes para copiar o xauth. Daqui em diante, você pode simplesmente:
Funciona muito bem com o MobaXTerm.
fonte
Você deve mudar completamente para o usuário de destino, ou seja, use "
-
" comsu
(su - standarduser ...
). Caso contrário, o material X da raiz será arrastado pelo ambiente.fonte
Como frequentemente faço root em um compartilhamento de arquivos de rede compactado com raiz, nenhuma das soluções acima funcionou para mim. (xubuntu 14.04). Eu montei o seguinte script, que funciona no meu sistema. Pode funcionar no seu. Então, novamente, pode não, mas é livre para tentar ...
Suposição é que eu usei a opção -Y.
fonte
cookie=$(xauth list|grep $h.*$port)
pode corresponder mais do que o pretendido se $ port fizer parte do valor do cookie. Mais seguro é:cookie=$(xauth list) cookie=${c%% *}
oucookie=$(xauth list |grep $h[^ ]*$port)
.No meu caso, quando encontrei esse erro, eu tinha um diretório de usuário criptografado. Depois de ligar
ecrypt-mount-private
, ele se livrou do erro e me permitiu continuar o encaminhamento do X11.Para determinar se sua pasta é criptografada, você pode tentar isso (como por esta resposta ):
ls -A /home
. Se você vir uma.ecryptfs
pasta, seu diretório pessoal provavelmente está criptografado. Nesse caso, você pode tentar executar o comando que eu coloquei no início da resposta.fonte