我遇到的情况是,多个用户在远程计算机上共享同一用户帐户。我有一个“个人”目录,我在其中编写了自己的.zshrc
文件,我希望有一种方法:
- 使用我的 ssh 配置文件中的指令在远程计算机中启动 ssh 会话(例如
ControlMaster auto
) - 此会话运行 Z shell
- 它在我的“个人”目录中运行
.zshrc
(而不是在共享用户的主目录中)
如果有一个别名或一个简单的方式来启动此类 ssh 会话,那就太好了(这就是我考虑使用 OpenSSH 的配置文件的原因),但我对任何其他想法持开放态度!
使用 OpenSSH 的配置文件?
我读了 OpenSSH 的 ssh_config手册页我可以使用指令LocalCommand
来指定要运行的命令本地成功连接服务器后。这让我觉得可能有一种方法可以告诉config
文件运行什么命令远程连接到服务器后,但似乎没有。
答案1
远程运行命令的最明显方法是在 ssh 命令行上指定它。 ssh 命令始终由远程用户的 shell 解释。
ssh [email protected] '. ~/.profile; command_that_needs_environment_variables'
ssh -t [email protected] '. ~/.profile; exec zsh'
共享帐户通常不是一个好主意;如果可能的话,为每个用户建立单独的帐户。如果您无法使用共享帐户,您可以创建一个别名:
ssh -t [email protected] 'HOME=~/bob; . ~/.profile; exec zsh'
如果您使用公钥身份验证(再次推荐),您可以在~/.ssh/authorized_keys
.看这个答案以获得更多解释。~/.ssh/authorized_keys
在服务器上编辑您的密钥行(全部在一行上):
command="HOME=$HOME/bob;
if [ -n \"$SSH_ORIGINAL_COMMAND\" ]; then
eval \"$SSH_ORIGINAL_COMMAND\";
else exec \"$SHELL\"; fi" ssh-rsa AAAA…== [email protected]
答案2
要在连接服务器后远程运行命令,请在 .ssh/config 文件中添加以下代码片段
PermitLocalCommand yes
Host <server-ip-address>
LocalCommand *command*