SSHログインでカスタム.bashrcファイルを使用する方法


21

私が仕事をしている新会社では、比較的短い寿命でLinuxサーバーにアクセスしなければならないことがよくあります。これらの各サーバーにはアカウントがありますが、新しいアカウントを作成するたびに、.bashrcを介して転送する手間をかける必要があります。ただし、約1か月後にはそのサーバーが使用できなくなる可能性があります。また、他の多くのサーバーに短時間(分)アクセスする必要があります。この場合、.bashrcを介して転送するだけの価値はありませんが、多くのサーバーで作業しているため、多くの無駄な時間が発生します。

サーバー上で何も変更したくないのですが、「接続ごと」の.bashrcを使用する方法があるのではないかと考えていたので、サーバーにSSH接続するたびに、そのセッションで設定が使用されます。

これが可能であれば、gitconfigファイルのような他の設定ファイルでも同じことができたらいいと思います。


これは接続ごとのソリューションではありませんが、それでも価値があると感じるかもしれません。GitHubのベースをチェックしてください。スーパーユーザーコミュニティに関するこの回答の詳細。
コードフォレスター

回答:


6

私はあなたが欲しいと思う(あなたが接続するマシンの.ssh / configに):

PermitLocalCommand yes
LocalCommand scp yourname@someserver:/dir/dotbash /local/home/dir/.bashrc

その後、あなたは次のように導くことができます:

source .bashrc

そして、あなたの陽気な方法にあります。LocalCommandは、実際のセッションの直前に、接続先のサーバーでコマンドを実行します。

また、サーバー上のsshdsが構成されていることを確認します PermitLocalCommand yes

LocalCommandを微調整して特定の環境で動作させる方法はたくさんあります。たとえば、内部Webサーバーからカールしたり、nfsマウントから引き出したりできます。


いくつかのメモ。まず、bashをサーバーに転送したいので、scpコマンドでファイルの順序を切り替えたと思います。逆にしたと思います。次に、; source /path/to/.bashrcscpコマンドの後に追加するだけで、自動的にソースを取得できます。最後に、この方法のそれほど重要ではない否定的な点は、パスワードを2回入力する必要があることです。しかし、最終的にはうまくいったので、ありがとう。
gsingh2011

ごめんなさい!私の頭の中で働いていたので、混乱についてすみません。環境内でパスワードなしのキー設定をセットアップできますか?私たちの環境にはそれがあり、それは美しいものです。それはうまくいきました!
クインマーフィー

@ gsingh2011:source /path/to/.bashrc接続元のマシンで実行されます。のコマンドLocalCommandはsshセッションにアクセスできません。
オリバー

@Oliverあなたは正しい。リモートコンピューターから.bashrcのソースを自動化することに決めました。最初のログイン時にサーバー側でいくつかのことを変更する必要がありますが、以前の操作よりもはるかに便利です。
gsingh2011

16

sshrcはあなたが探しているものだと思います:https : //github.com/Russell91/sshrc

sshrcはsshと同じように機能しますが、リモートでログインした後に〜/ .sshrcをソースします。

$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome

$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'

これを使用して、環境変数の設定、関数の定義、ログイン後のコマンドの実行ができます。それはとてもシンプルで、サーバー上の他のユーザーに影響を与えることはありません-sshrcを使用していてもです。より高度な構成については、読み続けてください。


リンクのみの投稿でスパムを停止してください。コメントを追加できます(とにかくsshrc関連の投稿です)。
鹿ハンター14

3
私はそれらのすべてを修正することに取り組んでいます!
ラッセルスチュワート14

できた 初めて、リンクのみの短い投稿をしたいと思いました。今、私はよく知っています。
ラッセルスチュワート14

1
私はずっと前に(sshrcの前に)simil sshrcを書きました:github.com/fsquillace/pearl-sshそれは、より効率的で、小さく、xxd依存性がありません。
user967489

1

以前にサーバーにアクセスしたことがない場合、〜/ .ssh / known_hostsにはエントリーがありません。

「ssh-keygen -F」で既知の既知のホストを検索できますが、ssh-keygenがミスに対してfalseを返さないため、その出力(grep)をテストする必要があります。異なる識別子(IPアドレス、ホスト名、FQDN)でホストを参照する場合、これらはそれぞれ個別のインスタンスとして扱われることに注意してください。

最初のログインでユーザー環境をそのホストに転送するsshのラッパーを作成できます。

ssh-newenv(){if!ssh-keygen -F $ 1 | grep -q "^#host $ 1 found:"; rsync〜/ .bashrc〜/ .bash_profile〜/ .bash_logout $ 1:。; fi; ssh $ 1; }

これをより堅牢にしたい場合は、既知の環​​境ファイル、ハッシュ、またはリモートホスト上の他のマーカーの存在を確認できます。


0

セッションごとの.bashrcがあるかどうかはわかりません。

別の解決策は、お気に入りの設定をすべて新しいホームフォルダーに転送する小さなスクリプトを作成することです。

たぶん、パスを含むすべての設定でフォルダを作成し、scpで転送するだけです

のような

/home/foobar/configs/.bashrc
/home/foobar/configs/.foo/bar.conf
...

そして、

scp -r /home/foobar/configs/* foo@example.com:/home/foo/

それは時間を節約します。


0

sshがあなたとは何の関係もないことを考えると、それは可能だとは思いません.bashrc。そのファイルをロードするのはシェルであり、sshではありません。

いくつかのアイデア:

  1. 最初にログインするときに、リモートホームディレクトリを設定します。
  2. NFSを使用して、すべてのサーバーで.bashrcを含むホームディレクトリをマウントします。そうすれば、どこでも同じ設定ができます。
  3. 一部の環境変数だけをリモートサーバーに送信しても問題ない場合は、SendEnvオプションをチェックアウトする必要があります(詳細については、ssh_configmanページを参照してください)。サーバーが正しくセットアップされている場合(つまりAcceptEnv、sshd_configで適切に設定されている場合)、SendEnv環境変数をリモートホストにコピーするために使用できます。
  4. それが機能するかどうかはわかりませんが、リモートホストに接続する前にProxyCommand設定を誤用して(ssh_configmanページを参照)、自分.bashrcまたは他のファイルを送信できる可能性があります。ただし、それにはいくつかのテストが必要です。また、これがscpに干渉する可能性があることに注意してください。

0

https://github.com/fsquillace/pearl-sshが必要なことを行うと思います。

sshrcが生まれるずっと前に書いたので、sshrcと比べてより多くの利点があります。

  • 両方のホストのxxdへの依存関係は必要ありません(リモートホストでは利用できない場合があります)
  • Pearl-sshはより効率的なエンコードアルゴリズムを使用します
  • わずか20行のコードです(本当に簡単に理解できます!)

例えば:

$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl myuser@myserver.com
myserver.com $> q
exit
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.