Eu quero abrir um arquivo dentro do Emacs que está localizado em um servidor remoto, com sudo no servidor. Posso abrir arquivos locais com sudo via Tramp assim:
C-x C-f /sudo::/home/user/file
Mas eu quero usar sudo no servidor:
C-x C-f /sudo::user@server/home/user/file
Mas isso me dá poderes sudo na minha máquina local, ele pede minha senha sudo na máquina local. Existe uma maneira de usar o sudo no servidor?
BTW: Emacs não está instalado no servidor
Respostas:
A partir do Emacs 24.3, um análogo do antigo
multi:
sintaxe foi colocado em camadas sobre atramp-default-proxies-alist
abordagem moderna , o que significa que você pode mais uma vez realizar vários saltos sem qualquer configuração anterior. Para obter detalhes, consulte:C-hig
(tramp) Ad-hoc multi-hops
RETCom a nova sintaxe, cada 'salto' é separado por
|
. O exemplo no manual é:C-xC-f
/ssh:bird@bastion|ssh:you@remotehost:/path
RETQue conecta primeiro como
bird@bastion
, e de lá parayou@remotehost:/path
/ su: ou / sudo: em hosts remotos
Você também pode usar esta sintaxe para sudo / su para fazer root (ou, claro, qualquer outro usuário) em um host remoto:
C-xC-f
/ssh:you@remotehost|sudo:remotehost:/path/to/file
RETImportante : certifique-se de especificar o nome do host explicitamente: em
sudo:remotehost:
vez desudo::
(veja abaixo).Como ele ainda usa o mecanismo de proxy por baixo,
tramp-default-proxies-alist
agora deve incluir o valor("remotehost" "root" "/ssh:you@remotehost:")
O que significa que o proxy
/ssh:you@remotehost:
será usado sempre que você solicitar um arquivo comoroot@remotehost
.root
é o usuário padrão para esses métodos, mas é claro que você também pode mudar para um usuário não root com:C-xC-f
/ssh:you@remotehost|sudo:them@remotehost:/path/to/file
RETSempre especifique o nome do host remoto explicitamente
Você provavelmente está acostumado a usar
sudo::
ousu::
e omitir o nome do host. Se você estiver hospedado no host local, tudo bem, mas se estiver pulando para um servidor remoto, você deve especificar o nome do host para cada salto - mesmo que seja o mesmo do salto anterior. Sempre usesudo:hostname:
ousu:hostname:
com hosts remotos.A armadilha aqui é que
sudo::
se realmente aparecer para o trabalho - no entanto , quando você faz que o host para a entrada de proxy dinâmico será o nome do host que você se originou a partir de em vez do anfitrião você conectado. Isso não só parecerá confuso (já que o host errado será exibido nos caminhos do arquivo), mas também significará que qualquer tentativa subsequente de usarsudo::
em seu host local será transferida por proxy para o servidor remoto! (e o proxy provavelmente também seria destruído se você fizesse a mesma coisa em um segundo servidor, causando mais problemas).Resumindo, não use
::
quando você multi-hop!fonte
/sudo:hostname:/etc/hosts
, recebo o que você esperava, mas quando digito/sudo:abbrev:/etc/hosts
, recebo a mensagem "O abrev do host parece um host remoto, o sudo só pode usar o host local". Isso pode ser corrigido?.ssh/config
entradas e não tenho problemas/ssh:abbrev|sudo:abbrev:/etc/hosts
para usar as abreviações do meu nome de host. Parece que você não está pulando primeiro para o host.tramp-default-proxies-alist
parece estar correto. No entanto, o comportamento que descrevi acima persiste. Meu arquivo de configuração está errado de alguma forma?/sudo:abbrev:/etc/hosts
o que fez no comentário anterior (que está errado, conforme mencionado) ou se está usando o correto/ssh:abbrev|sudo:abbrev:/etc/hosts
. Seu arquivo de configuração ssh provavelmente está bom, já que você pode evidentemente usá-lo de outra forma.Atualização : Embora esta resposta tenha resolvido o problema original, ela foi escrita para emacs 20 ou 21. Para emacs 24, eu recomendo que você use a resposta de phils porque ela oferece mais explicações e está atualizada.
Acho que nomes de arquivos multi-hop no tramp é o que você está procurando.
O primeiro salto seria ssh e o segundo seria sudo.
Atualização: as versões recentes do emacs oferecem suporte a vários saltos usando proxies:
Em seguida, invoque abrindo:
fonte
Tive alguns problemas com a resposta selecionada. No entanto, funcionou quando adicionei esta linha ao .emacs:
E então executei o seguinte:
/sudo:ssh-host:file-on-ssh-host
Foi um pouco confuso porque em um ponto fui solicitada a senha "root", mas inserir minha senha de usuário me concedeu acesso. Também funciona universalmente em todos os hosts da rede. Além disso, ainda posso fazer isso para não ser root:
/ssh:ssh-host:file-on-ssh-host
fonte
abc.xyz.com' looks like a remote host,
sudo 'só pode usar o host local" assim que eu insiro os segundos dois pontos em "/sudo:abc.xyz.com:". Ideias? Emacs 23.1.1 no Ubuntu 10.04 LTS.Da página da web de configuração de multi-saltos tramp
Então qualquer
irá abrir o arquivo usando sudo após logado com o mesmo nome de usuário do usuário executando o emacs, mas na máquina remota.
fonte
Você tem que entrar no servidor primeiro, então você tem que rodar o emacs localmente.
Ou você pode usar NFS com no_root_squash, ou pode tentar com servidor / cliente emacs, embora eu não tenha ideia do que pode acontecer (não uso emacs eu mesmo)
fonte