web-dev-qa-db-ja.com

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

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

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

これが可能であれば、gitconfigファイルなどの他の構成ファイルでも同じことができればいいのですが。

22
gsingh2011

私が望むのは(接続元のマシンの.ssh/configに)あると思います:

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

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

source .bashrc

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

また、サーバーのsshdsがPermitLocalCommand yes

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

6
Quinn Murphy

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を使用していても、サーバー上の他のユーザーに影響を与えることはありません。より高度な設定については、読み続けてください。

16
RussellStewart

これまでにサーバーにアクセスしたことがない場合、〜/ .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; }

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

1

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

私はsshrcが生まれるずっと前に書いており、sshrcに比べて多くの利点があります:

  • 両方のホストのxxdに依存する必要はありません(リモートホストでは使用できない場合があります)。
  • Pearl-sshはより効率的なエンコーディングアルゴリズムを使用します
  • それはほんの20行のコードです(本当に理解しやすいです!)

例えば:

$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl [email protected]
myserver.com $> q
exit
0
user967489

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

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

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

お気に入り

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

そして次に

scp -r /home/foobar/configs/* [email protected]:/home/foo/

時間を節約できます。

0

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

いくつかのアイデア:

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