不使用 bashrc/profile 在 ssh 会话中设置别名

不使用 bashrc/profile 在 ssh 会话中设置别名

如何使用alias本地 ssh 配置通过 SSH 在远程计算机上进行设置(不编辑远程 bashrc/profile 文件)。

背景:我有一台与一些开发人员共享的远程开发构建机器。我们只用它构建软件并发布它,但偶尔,我们需要对代码做一些小的更改并通过 git 提交它们。我不想在远程机器上使用 ssh 密钥,因此我们使用 SSH 代理转发,这样我们的本地 SSH 密钥就可以在远程机器上使用git push。但我们仍然需要在远程机器上设置 gituser.nameuser.email。目前,登录后,我执行,这样 git 提交就归于我。由于我们与一些开发人员共享同一个帐户,所以我不想在远程文件中设置该别名。那么有没有办法在我的本地 为主机设置该命令,以便我在登录时在 shell 中执行它?alias git='git -c "user.name=My Name" -c "[email protected]"'~/.bashrc~/.ssh/config

答案1

好吧,从一堆不同的问题中,我确实设法拼凑出一个解决方案。首先,您可以在 ~/.ssh/config 文件中使用RemoteCommandLocalCommand在登录前执行本地命令,然后执行不同的命令(shell),而不是直接进入 shell。我无法让它只与它一起工作RemoteCommand(似乎没有办法执行包括设置别名的远程命令),但你要做的是提供不同的 .bashrc 文件。

因此,它的工作原理如下:将本地 .bashrc 文件复制到 /tmp 中不同名称下的远程计算机。登录、执行 bash 并指定 .bashrc 文件,然后在注销时再次将其删除。此外,当您使用RemoteCommandin时~/.ssh/config,您需要告诉 ssh 强制使用伪 tty,以便获得正常的交互式 shell。

这是我的相关部分~/.ssh/config

Host mymachine
    Hostname mymachine.mydomain.com
    ForwardAgent yes
    User someuser
    RequestTTY force
    PermitLocalCommand yes
    LocalCommand scp ~/.sshrc [email protected]:/tmp/.bashrc_someuser
    RemoteCommand bash --rcfile /tmp/.bashrc_someuser; rm /tmp/.bashrc_someuser

文件~/.sshrc名是任意的。它只是本地机器上任何位置的文件。您甚至可以为不同的远程 ssh 机器创建多个版本。

我的~/.sshrc文件如下所示:

source ~/.bashrc
alias git='git -c "user.name=Me" -c "[email protected]"'

这将确保.bashrc应用远程计算机的,但之后您可以添加自己的自定义。现在我只需使用 ssh 即可ssh mymachine,git 命令可以正常工作并使用本地计算机中可用的任何密钥。

相关内容