.profile / .bashrcに相当するSSH


14

sshを使用するサーバーのセッション内でエイリアスを自動的に定義する方法を探しています。私はそれらを置くことができない.bashrcユーザが、私は他の人によって、そこにそれらの数十があり、すべてのマシン上でスクリプトを維持することは痛みを伴うだろう以外にも共有されていると、ログインアカウントため、サーバー上のファイル。expectエイリアスを自動的に入力するために使用できることは知っていますが、OpenSSHにこれを実現するために使用できると思われるものが組み込まれているかどうか疑問に思っていましたか?

回答:


7

期待してそれを行うことに何の問題もありません。私がやった他の方法もかなり汚いです。スクリプトで、最初に実行したいプロファイルをscpし、次にsshで実行し、実行して接続を維持します。

そのため、すべてのプロファイル設定をローカルファイルに配置し.<local username>-<hostname>-init.sh、以下のスクリプトを実行してリモートホストにログインします。

#!/bin/sh
[ $# -eq 0 ] && { echo "syntax: $0 <host> [<ssh-option>...]" 1>&2 ; exit 1 ; }
host=$1 ; shift    # use any remaining args as ssh options
initfile=".$USER-`hostname`-init.sh"
scp -q ~/.ssh-init.sh "$host:/var/tmp/$initfile"
ssh -t "$@" $host "bash --rcfile /var/tmp/$initfile"

サーバー上で特別な構成を必要としないため、これが気に入っています。
ラモン

4

設定を入れて、.bashrcログインしたときにのみ実行させることができます。これを可能にするには、sshを介して環境変数を渡すことができます。

.bashrc 修正

# common stuff
if [ -n "$IAMTHEGREATEST" ]; then
  # my personal cool stuff
fi;
# other global stuff

sshd_config 変更:

AcceptEnv ... IAMTHEGREATEST

.ssh/config 変更(クライアント側):

Host ...
  SendEnv IAMTHEGREATEST

.bashrc 変更(クライアント側):

alias ssh='IAMTHEGREATEST="forsure" ssh'

(未テストですが、実行する必要があります)


OPがログインするサーバーで自動的に設定するという目的をどのように達成しますか?
ワンブル

ありません。これは、質問の「ログインしているユーザーアカウントが他のユーザーと共有されている」という部分を解決します
-krissi

これは私がやることとほぼ同じですが、1つの違いがあります。外部からその環境変数を受け入れる代わりに、SSHキー自体に設定します。これは、.ssh / authorized_keysにenvironment = "IAMTHEGREATEST = forsure" ssh-dssで始まる行が含まれていることを意味します...
ブロンゴンドワナ

3

ssh(1)のマニュアルページから、〜/ .ssh / rcファイルを作成すると、ユーザーのログインシェルが実行される前に実行されるため、ログインする前に「事前設定」タスクを実行できます。与えられた例は、ログインする前にネットワーク共有をマウントすることでした。

個々の〜/ .ssh / rcファイルを使用したくない場合は、/ etc / ssh / sshrcでも同じことができます。特定のユーザー名または特定の識別方法をチェックする簡単なテストにより、他のユーザーがこれが行われていることに気付かないように制限できます。

/ etc / ssh / sshrcは、〜/ .ssh / rcが存在しない場合にのみ供給されるため、2層の複雑さを効果的に実現できます。


ding ding ding-勝者がいます!
追って通知があるまで一時停止します。

逃した!魅力的なように見えますが、サーバー側の右側にあるため、各サーバーを個別に設定する必要がありますか?
ラモン

はい、サーバー側ですが、1つのファイルを一度だけscpするだけで済みます。ログインするとすぐに処理されるコマンドのストリームを送信する簡単な方法はありません。{Grin}ちょっと教えてください、多分何か書いてください... {今日ではない!}
lornix

2

エイリアスはシェルによって定義および解釈されます。

残念ながらssh、それらをリモートシェルに渡す方法はありません。

sshクライアント側でリモート側に素敵な環境を設定するラッパーを書くこともできますが、それは見栄えがよくありません。


0

可能であれば、どこからでもアクセスできるサーバーに必要なものをすべて初期化/定義する小さなスクリプトを保存し、各サーバーにログインした後に実行します。


0

考えられる解決策の1つは、他のすべてのサーバーがアクセスできるWebサーバーにすべてを設定するスクリプトを配置することです。

その後、各サーバーは次のようなことを行うために小さなスクリプトを必要とするだけです。

wget http://myserver.com/myawesomescript.sh
chmod +x myawesomescript.sh
./myawesomescript.sh

そうすれば、1か所で更新するだけで済みます。


-3

.ssh / configを見てください

次に例を示しますhttps://lookherefirst.wordpress.com/2007/12/17/a-simple-ssh-config-file/


これが役立つと思う理由について詳しく説明してください。
ゾレダチェ

回答には、コンテンツへのポインタではなく、コンテンツが含まれることを本当に好みます。これは理論的には質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供することが望ましいでしょう
user9517
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.