Emacs SSH - 强制只读

Emacs SSH - Enforce read-only

是否可以使用 /ssh:user@server 以只读访问权限连接到 SSH 服务器,即使该帐户具有写访问权限?我需要这个来防止意外写入。

这是我用来连接的函数:

(defun connect-b2b ()
  (interactive)
  (find-file-other-window "/ssh:user@server:/")
  buffer-read-only)
 (global-set-key (kbd "C-c C-d") 'connect-b2b)

注意 buffer-read-only 没有帮助,vc-toggle-read-only 也没有帮助。

更新:为了明确我想要实现的目标,我有一个具有读+写访问权限的帐户,但是由于这是一个关键业务服务器,我想防止意外更改。不幸的是,我无法更改用户帐户本身的权限,因此我想在本地强制执行此操作。

如果我正确地解释了这个问题,目录局部变量是一个潜在的解决方法。但是,如果在相关路径附近有 dir-local 配置,这将被覆盖,所以 YMMV。

(dir-locals-set-class-variables
 'read-only
 '((nil . ((buffer-read-only . t)))))

(dir-locals-set-directory-class "/ssh:user@server:/" 'read-only)

I'm still able to for example touch a file in the specified directory.

这与 Emacs 无关。您要求 Emacs 使用 OS 级别的访问控制,这是它做不到的,因为它不是 OS。在你的情况下,它甚至不在同一台机器上 运行。

您需要创建一个具有更有限访问权限的新用户,然后以 那个 用户的身份连接。

第三个建议:使用sshfs本地提供远程文件系统,,然后将Emacs指向that.

这样您就不会遇到能够以具有写入权限的用户身份直接在远程服务器上 运行 命令的所有陷阱。