通过 ssh 在远程服务器上使用本地 LS_COLORS,而无需修改远程服务器

通过 ssh 在远程服务器上使用本地 LS_COLORS,而无需修改远程服务器

我可以访问大量不同的 ssh 帐户,我想有几百个,我会在不同场合使用这些帐户。其中一些是个人帐户,一些是我从客户那里得到的,是共享的,还有很多是临时的。创建这些帐户仅供一次使用,一段时间后会自动删除。

现在我的问题是我使用了两个 .dircolors,一个是浅色主题,一个是深色主题。我非常喜欢这种设置,但这意味着每次我 ssh 进入服务器时都要复制一个新的 .dircolors,而且在共享帐户上有时会打扰其他人。我尝试修改我的 ssh 脚本以允许我使用本地 LS_COLORS,但遇到了一些问题。

如果我使用: ssh -t vps2 'export LS_COLORS="'$LS_COLORS'"; exec /bin/bash --noprofile --norc' 它可以工作,但并不完全可用,因为它忽略了所有系统默认信息。

如果我使用: ssh -t vps2 'export LS_COLORS="'$LS_COLORS'"; exec /bin/bash' 它不起作用,因为 bash 会经过 .profile 并加载不同的 LS_COLORS。

关于如何加载默认的 .bash_profile/.bashrc 并拥有我自己的 LS_COLORS,有什么建议吗?

答案1

创建一个文件,比如“prefs.rc”,并进行任意你喜欢的初始化。

$ scp prefs.rc vps2:/tmp/ && ssh vps2
# ssh banner
$ . /tmp/prefs.rc && rm /tmp/prefs.rc

我可能会添加一些检查来验证远程文件确实是我写的,并且不包含某些木马。最好谨慎一点。

或者,使用下列序列启动 prefs.rc

. /etc/profile
. ~/.bash_profile
exec LSCOLORS=...

使用scp进行转移,然后:

ssh -t vps2 'exec bash --rcfile /tmp/prefs.rc'

最终,您可能需要复制 .bash_profile 的全部内容,然后替换该LS_COLORS=...行。

答案2

这有效(客户端,无需任何服务器修改): expect -c 'spawn ssh vps2 expect "~#" send "export LS_COLORS=\"no=00:fi=00:ETC_ETC_ETC_ETC:\"\r" interact'

当然,这远非最佳(因为它在 ssh 之后“输入”导出命令,从而导致延迟),任何更清晰的解决方案都非常受欢迎!:)

答案3

ssh -t vps2 ' cp ~/.bashrc ~/.bashrc.n &>/dev/null ; echo "LS_COLORS=\"no=00:fi=00:ETC:ETC:ETC\";" >> ~/.bashrc.n ; echo "export LS_COLORS" >> ~/.bashrc.n ; echo "alias ls=\"ls --color=auto\";" >> ~/.bashrc.n ; exec bash --rcfile ~/.bashrc.n'

这将无需先执行额外的 scp 即可工作,此处的额外连接延迟应该不存在。登录期间您不需要任何额外的命令,并且它将使用现有 shell 的设置,除了我的覆盖之外。它不会像 expect 那样破坏终端大小调整 :)

我实际上还添加了 PS1 和带有颜色的 grep/egrep 别名,但为了便于阅读,上面的示例代码没有添加它。

相关内容