使用Emacs 24.3在具有sudo访问权限的流浪盒上远程打开文件

时间:2014-11-19 20:57:39

标签: emacs vagrant sudo tramp

根据this answer,我尝试使用以下命令编辑/etc/resolv.conf作为我的流浪者盒子上的超级用户:

C-x C-f /vagrant@127.0.0.1#2200|sudo:127.0.0.1#2200:/etc/resolv.conf

但它只是在我的本地计算机上打开了一个文件,报告/vagrant@127.0.0.1#2200|sudo:127.0.0.1#2200:/etc/作为我的PWD并告诉我使用一些M-x命令来创建目录,因为它不存在。

意思是它没有连接到我的流浪盒。但是当我输入

C-x C-f /vagrant@127.0.0.1#2200:/etc/resolv.conf

它在我的流浪盒上的只读缓冲区(不使用sudo)中打开文件。

如何使用Emacs 24.3使用sudo访问打开流浪盒上的远程文件(请注意上面默认使用的NAT连接)? (我在Fedora 20上。)

2 个答案:

答案 0 :(得分:4)

#port语法为only supported for SSH-based connection types,因此令sudo跳混乱。你可以试试像

这样的东西
/ssh:127.0.0.1#2222|sudo:127.0.0.1:/etc/resolv.conf

但这与answer you linked中列出的问题相同:动态代理条目的主机现在为127.0.0.1,这是您的本地系统,阻止/sudo::在本地工作

您可以通过为您的Vagrant机器命名来避免这种情况。

如果您向~/.ssh/config添加条目,例如

,这几乎是微不足道的
Host vagrant
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /home/chris/.vagrant.d/insecure_private_key
IdentitiesOnly yes
LogLevel FATAL
ForwardAgent yes
ForwardX11 yes

然后使用C-x C-f /ssh:vagrant|sudo:vagrant:/etc/resolv.conf。这样做的另一个好处是可以缩短打字时间。

配置块来自vagrant ssh-config

答案 1 :(得分:0)

如果我使用像

这样的东西,对我有用
/ssh:vagrant@localhost#2222|sudo:root@localhost#2222:/etc/hosts

作为路径。我认为你的食谱的唯一区别是@Carl Groner在评论中明确包含的ssh:方法

<强>更新 我之前曾建议将sudo部分的主机名留空,但事实证明这是一个糟糕的主意,正如@Chris在评论中指出的那样。我也同意他的观点,即#port实际上只是用于使用ssh方法tramp路径,而这可能是更好的避免

我认为执行此操作的最佳方法是{。{}}为.ssh / config中的流浪汉机器设置ssh别名,或者 - 将您的授权ssh公钥添加到root用户的流浪汉机器 - 并使用单跳以root身份进行编辑,例如

/ssh:root@192.168.100.10:/etc/hosts 

完全避免多重复杂。

这是我管理流浪汉编辑的方式。我将流浪汉机器配置为具有config.vm.network "private_network" , ip: 192.168.100.10的专用网络地址,对于非短暂机器(如开发vms),我将此IP添加到我的主机文件中。 (您还可以将此主机地址的ssh别名添加到.ssh / config中,如下所示)。然后我手动或使用配置将我自己的ssh pubkey放入~root / .ssh / authorized_keys。

显然这涉及更多的流浪汉配置,但是要保持复杂性远离流浪汉,因为我在标准端口22并使用基本的ssh:方法路径。