SSHを介して多くのマシンにコンソール接続する必要があります。 Linux、Mac、モバイルデバイス、仮想マシンを含みます。 1日に10台以上のマシンにログインする必要がある場合があります。
プロンプト(PS1)、履歴制御、エイリアス、その他の便利な設定など、個人的な.bashrcまたは.bash_profile設定を楽しんでいます。しかし、これらの設定を多くのマシンで維持することは、苦痛に他なりません。
それで、誰かがこれを自動化する方法を知っているなら?私の「motherworld-PC」から設定を「運ぶ」のが最善でしょう。
https://serverfault.com/a/400782 で説明されているアプローチを使用できます。
これを行うには、PermitLocalCommandとLocalCommandを使用する必要があります。
解決策は大丈夫だと思いますが、リモートマシンの.bashrcがローカルの.bashrcをリモートの.bashrcにscp
することで置き換えられるため、気に入らなかった。また、思った通りに動かせませんでした。
別の解決策は、で説明されているように、gitを使用してすべてのドットファイルを管理することです。
http://blog.smalleycreative.com/tutorials/using-git-and-github-to-manage-your-dotfiles/
しかし、私にとっての大きな問題は、ドットファイルを使用して各サーバーをセットアップする必要があることです。ドットファイルを各サーバーに展開する時間(および忍耐)があったとしても、1つの問題があります。
複数のユーザーが同じログインを使用して同じサーバーにログインするコンテキストを想像すると、サーバーのデフォルトをmyのデフォルトに変更するのは不公平です。
次に...
それで、私はそのための独自のソリューションを開発しました。あなたがそれを気に入って、それが役立つことを願っています:
次のことを行う必要があります。
mycustombashrc.sh
です。<>
ボタンをクリックしてGistの未加工バージョンのリンクを取得します。このリンク、raw Gistリンクまたは[〜#〜] rawgistlink [〜#〜]次に、ローカルの.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
今すぐエイリアスの1つを試してください!
ノート
source ~/.bashrc
を実行します。 それだけです!リモートサーバーで何も変更する必要はありません!wget
することもできます。たとえば、パブリックWebサーバー。scp
することができます。ローカルマシンがルーターやファイアウォールの背後に隠れないことを想定するのは難しいため、このソリューションは使用しませんでした(私の場合、私はルーターの背後にいます)このアプローチの最も良い点は、リモートサーバーでは何も変更されず、ローカルマシンではほとんど労力をかけずに、Gistを使用すると、任意のサーバーでローカル.bashrcのすべての楽しみを得ることができることです。
また、ssh
の代わりにcustomssh
を使用すると、これを簡単に「無効」にすることができます。
これに対する一般的なアプローチの1つは、ドットファイルをgithubまたは別のバージョン管理システムに配置することです。それらを簡単に更新できるだけでなく、何かを元に戻す必要があるときに行った変更の履歴を保持できます。
「githubのドットファイル」と「バージョン管理のドットファイル」をグーグルですばやく検索すると、便利に見えるページがいくつか見つかりました。
これを設定した後、各サーバーでcronjobを使用して更新を自動化するか、.bash_profileに「gitpull」を追加するだけで済みます。
最近この質問に出くわし、.bashrcファイルを複数のホストにプッシュする方法についての回答を追加したいと思いました。
この架空の例では、.bashrcファイルを必要とする18台の「vcn」サーバーがあります。幸運にも標準化された命名規則がある場合は、bashの中括弧を利用し、ループを使用して、数値で追加されたサーバー名を繰り返すことができます。次に、ローカルの.bashrcファイルをそれらにscpします。
for vcn in r1-vcn{1..9} r2-vcn{1..9}; do scp ~/.bashrc $vcn:/home/user/; done;
次の手順を実行すると、bashrcをダウンロードしたり、使用しているサーバー上のものを変更したりすることなく、bashrcを使用できます。ファイルはソースにカールします。つまり、ファイルはメモリ内にのみ存在し、そのセッションに対してのみ存在します。
source <(curl -s -A '' https://somedomain.com/bashrc);
rsync のようなものはおそらくあなたのニーズに合うでしょう。それが不可能な場合は、Dropboxを使用して各デバイス間でファイルを同期し、ローカルで同期されたファイルとそれ以外の場合に必要な場所との間にシンボリックリンクを作成します。
このツールが便利な場合もありますが、これらがすべて自分のマシンであり、共有マシンではない場合は、おそらくgithubが最適です。
sshrcはsshと同じように機能しますが、リモートでログインした後に〜/ .sshrcをソースします。
$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome
$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'
これを使用して、環境変数の設定、関数の定義、およびログイン後のコマンドの実行を行うことができます。これは非常に単純で、サーバー上の他のユーザーに影響を与えることはありません。ユーザーがsshrcを使用している場合でも同様です。より高度な構成については、読み続けてください。 https://github.com/Russell91/sshrc
あなたが直面している痛みは非常に一般的です。私は同じ問題を抱えており、問題を解決するためにBase
と呼ばれるこのフレームワークを思いつきました。このフレームワークは、Bash設定を複数のマシン間で同期させるという基本的な問題を解決するだけでなく、設定、スクリプト、およびライブラリをチームメンバー間、複数のチーム間、または企業レベルで共有するためのシンプルで強力な方法も含みます。あなたは1つのために働いています。
ここでそれをチェックしてください: https://github.com/codeforester/base