私が協力している新しい会社では、比較的寿命の短いLinuxサーバーにアクセスしなければならないことがよくあります。これらの各サーバーにはアカウントがありますが、新しいサーバーが作成されるたびに、.bashrcを介して転送するという面倒な作業を行わなければなりません。ただし、約1か月の間にサーバーが稼働しなくなる可能性があります。また、他の多くのサーバーに短時間(分)アクセスする必要があります。この場合、.bashrcを介して転送するだけの価値はありませんが、多くのサーバーで作業しているため、これにより、多くの無駄な時間が発生します。
サーバー上で何も変更したくないのですが、「接続ごと」の.bashrcを作成する方法があるかどうか疑問に思っていたため、サーバーにSSHで接続するたびに、そのセッションで設定が使用されました。
これが可能であれば、gitconfigファイルなどの他の構成ファイルでも同じことができればいいのですが。
私が望むのは(接続元のマシンの.ssh/configに)あると思います:
PermitLocalCommand yes
LocalCommand scp yourname@someserver:/dir/dotbash /local/home/dir/.bashrc
次に、あなたは次のように導くことができます:
source .bashrc
そしてあなたの陽気な方法にあります。 LocalCommandは、実際のセッションの直前に、接続先のサーバーでコマンドを実行します。
また、サーバーのsshdsがPermitLocalCommand yes
LocalCommandを微調整して特定の環境で機能させる方法はたくさんあります。たとえば、内部Webサーバーからカールしたり、nfsマウントからプルしたりできます。
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を使用していても、サーバー上の他のユーザーに影響を与えることはありません。より高度な設定については、読み続けてください。
これまでにサーバーにアクセスしたことがない場合、〜/ .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; }
これをより堅牢にする場合は、リモートホストに既知の環境ファイル、ハッシュ、またはその他のマーカーが存在するかどうかを確認できます。
https://github.com/fsquillace/pearl-ssh が必要なことを実行すると思います。
私はsshrcが生まれるずっと前に書いており、sshrcに比べて多くの利点があります:
例えば:
$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl [email protected]
myserver.com $> q
exit
セッションごとの.bashrcがあるかどうかはわかりません。
別の解決策は、すべてのお気に入りの構成を新しいホームフォルダーに転送する小さなスクリプトを書くことです。
たぶん、パスを含むすべての設定を含むフォルダを作成し、scpで転送するだけです
お気に入り
/home/foobar/configs/.bashrc
/home/foobar/configs/.foo/bar.conf
...
そして次に
scp -r /home/foobar/configs/* [email protected]:/home/foo/
時間を節約できます。
Sshが.bashrc
とは何の関係もないことを考えると、それは可能ではないと思います。そのファイルをロードするのはシェルであり、sshではありません。
いくつかのアイデア:
SendEnv
オプションを確認する必要があります(詳細については、ssh_config
のマニュアルページを参照してください)。サーバーが正しく設定されている場合(つまり、sshd_configに適切なAcceptEnv
がある場合)、SendEnv
を使用して環境変数をリモートホストにコピーできます。ProxyCommand
設定(ssh_config
のマニュアルページを参照)を誤用して、接続する前に.bashrc
またはその他のファイルを送信してしまう可能性がありますリモートホスト。ただし、テストが必要になります。また、これがscpを妨害する可能性があることにも注意してください。