ssh,启动特定的 shell,并在远程计算机上运行命令?

ssh,启动特定的 shell,并在远程计算机上运行命令?

我遇到的情况是,多个用户在远程计算机上共享同一用户帐户。我有一个“个人”目录,我在其中编写了自己的.zshrc文件,我希望有一种方法:

  1. 使用我的 ssh 配置文件中的指令在远程计算机中启动 ssh 会话(例如ControlMaster auto
  2. 此会话运行 Z shell
  3. 它在我的“个人”目录中运行.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*

相关内容