在多台机器上自动传播 bash 设置?

exe*_*ook 8 ssh bash console

我需要通过 SSH 控制台到许多机器。包括Linux、Mac、移动设备、虚拟机。有时候一天要登录10多台机器。

我喜欢我的个人 .bashrc 或 .bash_profile 设置,比如提示 (PS1)、历史控制、别名和其他有用的设置。但是在许多机器上保持这些设置只是痛苦。

所以如果有人知道如何自动化这个?最好的办法是从我的“motherworld-PC”中“随身携带”这些设置。

小智 7

您可以使用https://serverfault.com/a/400782 中描述的方法

您必须使用 PermitLocalCommand 和 LocalCommand 来完成此操作。

我认为这个解决方案是好的,但我不喜欢它,因为它会scp通过将我的本地 .bashrc替换为远程.bashrc 来替换远程机器的.bashrc。此外,我无法完全按照我的预期工作。

另一种解决方案是使用 git 来管理所有的点文件,如

http://blog.smalleycreative.com/tutorials/using-git-and-github-to-manage-your-dotfiles/

但是对我来说一个很大的问题是我必须用我的点文件设置每个服务器。即使我有时间(和耐心)将我的 dot 文件部署到每台服务器,我仍然会遇到一个问题。

想象一个上下文,其中多个用户使用相同的登录名登录到同一台服务器,将服务器默认值更改为我的默认值是不公平的。

然后...


所以,我为此开发了自己的解决方案,希望你喜欢它并发现它有用:

您将需要:

  • 在.bashrc 的 https://gist.github.com/创建(私有)要点
    • 您需要在 github 上登录才能创建要点
    • 注意 .bashrc 环境变量中的密码等敏感信息。无论如何,这种信息一开始就不应该存在。
    • 不要因为您为 gist 文件指定的名称。我将称之为GISTNAME。选择一个在远程目录中不太可能找到的名称。请不要将其命名为“.bashrc”。=) 一个好名字是mycustombashrc.sh
    • 保存要点后,通过单击<>按钮获取它的原始版本链接。您将需要此链接、原始要点链接RAWGISTLINK

然后在您的本地.bashrc将以下内容放在最后:

function customssh(){
  ssh $@ -t 'cd $HOME ; 
  wget --quiet -N "RAWGISTLINK" ;
  cp GISTNAME .'$USER'bashrc  ; 
  bash --rcfile $HOME/.'$USER'bashrc'

}
Run Code Online (Sandbox Code Playgroud)

记得替换 GISTNAME 和 RAWGISTLINK

现在运行

source ~/.bashrc

然后只需使用customssh(您仍然可以使用常规的ssh

customssh mylogin@remoteserver

现在就试试你的别名之一吧!

笔记

  • 是的,这可能会在每次登录时下载 gist 文件,但相信我,它真的很快。别担心。
  • 更新共享的 .bashrc
    • 转到要点 URL,并进行更改(或将本地 .bashrc 复制到其中)。
    • 然后更新 customsh 函数,用新的RAWGISTLINK替换 RAWGISTLINK (gist 链接和 GISTNAME 是相同的,但是当您对文件进行更改时原始 gist 链接会发生变化)。
    • 现在只需运行source ~/.bashrc就是这样!无需更改远程服务器中的任何内容!
  • 我的解决方案完全基于 Ubuntu,也许它需要一些调整才能与其他发行版一起使用
  • 您可能可以使用其他服务,例如 gist 而不是 github 的 gist。Pastebin 是一个例子,但还有其他例子。这是完全可能的,但我还没有尝试过。
  • 您也可以wget从其他地方使用 custombashrc.sh。例如公共网络服务器。
  • 另一种选择,如果您的本地机器通过 ssh 在互联网上可见,您可以scp将文件从本地服务器(使用公共地址)发送到远程服务器。我没有使用这个解决方案,因为很难假设你的本地机器不会隐藏在路由器或防火墙后面(就我而言,我在路由器后面)
  • 也许您可以在不同版本的 ubuntu 中找到问题,但我还没有遇到它们。

这种方法的最佳之处在于它在远程服务器中没有任何改变,并且在本地机器上几乎没有任何变化,并且有了 gist,您可以在任何您想要的服务器中获得本地 .bashrc 的所有乐趣。

而且您仍然可以通过使用ssh而不是轻松地“禁用”它customssh


小智 1

像rsync这样的东西可能会满足您的需求。如果这不是一个选项,请使用 Dropbox 在每个设备上同步文件,并在本地同步的文件与您需要它的位置之间创建符号链接。