我有一个远程服务器,其中有一个 ~/.ssh/rc 文件。每次我 ssh 进入该服务器时,它都会运行该文件,然后将我放入远程 shell 中。通常这就是我想要的。有时我不想要这个。
当我 ssh 时是否可以提供一个选项,以便它不会执行 ~/.ssh/rc?
答案1
客户端无法执行此操作。这是一项安全功能:该~/.ssh/rc
文件可能会执行客户端无法绕过的操作(尽管这不是常见用途)。
绕过任何操作~/.ssh/rc
的最明显方法是将其包装在依赖于环境变量的代码中,并允许客户端将此环境变量传递给服务器(AcceptEnv
中的指令/etc/sshd_config
)。
从服务器端执行此操作的另一种方法是no-user-rc
使用带有参数的键。
答案2
ssh
在简要扫描了手册和手册后,我能看到的唯一方法是,sshd
将此文件不是通过更改 SSH 来执行客户是通过使用单独的密钥与主机进行身份验证。
~/.ssh/rc
可以通过no-user-rc
在~/.ssh/authorized_keys
文件中设置用户可以使用的特定键的选项来禁用的执行。
该文件通常可能如下所示:
ssh-ed25519 AAAASOMEKEYSIGNATUREHERE myself@somehost
这可以通过sshd
手册中描述的选项进行补充:
no-user-rc ssh-ed25519 AAAASOMEKEYSIGNATUREHERE myself@somehost
然后可以添加另一个不同的键,以便何时rc
执行该文件:
no-user-rc ssh-ed25519 AAAASOMEKEYSIGNATUREHERE myself@somehost
ssh-ed25519 AAAASOMEDIFFERENTKEYSIGNATUREHERE myself@somehost
在本地,您可以根据您是否想要执行该rc
文件来使用单独的键进行连接,可能通过使用以下配置~/.ssh/config
:
Host myhost
Hostname theremote.host
User myself
IdentityFile %d/.ssh/id_ed25519
Host myhost-norc
Hostname theremote.host
User myself
IdentityFile %d/.ssh/id_ed25519-norc
其中调号的签名与调号签名~/.ssh/id_ed25519-norc
相匹配no-user-rc
。
虽然这看起来相当复杂,但老实说,我根本找不到任何其他方法来避免执行该rc
文件。另一种选择是,正如吉尔斯建议的那样,让rc
文件绕过基于某些环境变量正在执行的任何操作,而是/etc/ssh/sshrc
像通常在文件不存在时执行的那样调用rc
(sshd
手册说如果/etc/ssh/sshrc
也不存在,则xauth
使用 then ,请参阅sshd
手册以了解更多信息信息)。