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

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

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

我喜欢我的个人 .bashrc 或 .bash_profile 设置,例如提示符 (PS1)、历史记录控制、别名和其他有用的设置。但在多台机器上保存这些设置非常麻烦。

那么,如果有人知道如何实现自动化呢?最好的办法是从我的“motherworld-PC”中“携带”设置。

答案1

您可以使用以下方法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/

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

想象一下,如果多个用户使用相同的登录名登录到同一台服务器,将服务器默认设置更改为我的默认值。

然后...


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

您需要:

  • 创建(私人)要点https://gist.github.com/你的 .bashrc
    • 你需要登录 github 来创建 gist
    • 注意 .bashrc 环境变量中的敏感信息,例如密码。无论如何,这种信息不应该存在。
    • 不要拿你给 gist 文件起的名字当回事。我会叫它吉斯特名称。选择一个不太可能在远程目录中找到的名称。请不要将其命名为“.bashrc”。=) 一个好的名字是mycustombashrc.sh
    • 保存要点后,点击获取其原始版本链接<>。您将需要此链接,原始要点链接或者原始链接

然后在您的本地.bashrc末尾输入以下内容:

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

}

记住替换 GISTNAME 和 RAWGISTLINK

现在运行

source ~/.bashrc

然后只需使用customssh(你仍然会有常规的ssh

customssh mylogin@remoteserver

现在就尝试您的一个别名吧!

笔记

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

这种方法最好的地方在于它不会改变远程服务器中的任何内容,而且只需在本地机器上做出很少的努力,使用 gist 您可以在所需的任何服务器中获得本地 .bashrc 的所有乐趣。

ssh而且您仍然可以通过使用而不是 来轻松“禁用”此功能customssh

答案2

一种常见的方法是将你的点文件放入 github 或其他版本控制系统。你不仅可以轻松更新它们,还可以保留所做的更改的历史记录,以便在需要恢复某些内容时使用。

在 Google 上快速搜索“github 中的点文件”和“版本控制中的点文件”给了我几个看起来很有用的页面:

设置完成后,您可以使用每台服务器上的 cronjob 自动执行更新,或者只需在 .bash_profile 中添加“git pull”即可。

答案3

就像是同步可能符合您的需求。如果这不可行,请使用 Dropbox 在每个设备之间同步文件,并在本地同步的文件和您需要它的位置之间创建符号链接。

答案4

我最近遇到了这个问题并想添加关于如何将我的 .bashrc 文件推送到多个主机的答案。

在这个假设的例子中,有 18 个“vcn”服务器需要我的 .bashrc 文件。如果您有幸拥有标准化的命名约定,您可以利用 bash 中的花括号并使用循环迭代以数字方式附加的服务器名称。然后只需将本地 .bashrc 文件 scp 到它们即可。

for vcn in r1-vcn{1..9} r2-vcn{1..9}; do scp ~/.bashrc $vcn:/home/user/; done;

相关内容