如何使用alias
本地 ssh 配置通过 SSH 在远程计算机上进行设置(不编辑远程 bashrc/profile 文件)。
背景:我有一台与一些开发人员共享的远程开发构建机器。我们只用它构建软件并发布它,但偶尔,我们需要对代码做一些小的更改并通过 git 提交它们。我不想在远程机器上使用 ssh 密钥,因此我们使用 SSH 代理转发,这样我们的本地 SSH 密钥就可以在远程机器上使用git push
。但我们仍然需要在远程机器上设置 gituser.name
和user.email
。目前,登录后,我执行,这样 git 提交就归于我。由于我们与一些开发人员共享同一个帐户,所以我不想在远程文件中设置该别名。那么有没有办法在我的本地 为主机设置该命令,以便我在登录时在 shell 中执行它?alias git='git -c "user.name=My Name" -c "[email protected]"'
~/.bashrc
~/.ssh/config
答案1
好吧,从一堆不同的问题中,我确实设法拼凑出一个解决方案。首先,您可以在 ~/.ssh/config 文件中使用RemoteCommand
和LocalCommand
在登录前执行本地命令,然后执行不同的命令(shell),而不是直接进入 shell。我无法让它只与它一起工作RemoteCommand
(似乎没有办法执行包括设置别名的远程命令),但你能要做的是提供不同的 .bashrc 文件。
因此,它的工作原理如下:将本地 .bashrc 文件复制到 /tmp 中不同名称下的远程计算机。登录、执行 bash 并指定 .bashrc 文件,然后在注销时再次将其删除。此外,当您使用RemoteCommand
in时~/.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 命令可以正常工作并使用本地计算机中可用的任何密钥。