シェルがリモートSSHセッションによって所有されていることを検出する方法は?


9

私の質問はこれと似ていますが、少し違うものを探しています。2つの異なるシナリオでネットワーク上のLinuxマシンにアクセスするために使用するノートブックPCを持っています。

  • ネットワークに直接、有線で接続しています。

  • ネットワークに間接的に接続しています。ネットワーク上にインターネットに公開されているゲートウェイマシンがあり、これを使用してネットワーク上のホストへのSSHトンネルを確立できます。これは明らかに、はるかに遅く、待ち時間が長い接続です。

私のホームディレクトリはすべてのマシンからネットワークにアクセスできるため、私ののコピーを共有しています.bashrc.bashrc2つのシナリオのどちらを使用しているかを検出し、それに応じて機能する機能を追加したい(技術的には、3つ目のシナリオがあります。3つ目は、ローカルマシンにログインしているが、簡単に処理できるはずです)。私は次のようなことをしたいと思います:

  • alias ssh ssh -X ローカルネットワーク上にいるが、インターネット経由でX転送を使用したくない場合。

  • export EDITOR=gvimローカルネットワークにいるexport EDITOR=vimとき、リモートにいるとき。

等々。前の回答に基づいて、SSH_CLIENT(存在する場合)の内容を確認し、クライアントIPアドレスがローカルマシンのネットワークアダプターの1つと一致するかどうかを確認することで、このようなことを達成できるはずです。これを実現するためのよりスマートでより堅牢な方法があるかどうかを確認すると思いました。

回答:


10

SSHセッションを検出するには、を使用します$SSH_CLIENT

ローカルセッションとリモートセッションを区別するには、クライアント側とサーバー側の2つの方法があります。サーバー側$SSH_CLIENTで、ローカルIPアドレスまたはルーティングテーブルと比較します。これは通常、接続がLANからのものかどうかを通知します。クライアント側では、あなたが入れたいことがありForwardX11、あなたの設定を~/.ssh/config:に設定するyesLANのホストのためにとにnoWANホストの。これは、~/.ssh/config異なるサイトで異なることを意味します。それは私がやっていることであり、私はシェルスクリプトを使用して私のものを生成します。

X11転送がLAN接続でオン、WAN接続でオフの場合、お気に入りのエディターを$DISPLAY考慮に入れるように設定できます。

サーバー側の設定は通常、に設定されます.profile(または.bash_profile、ログインシェルがbashで、を使用している場合.bash_profile、または.zprofileログインシェルがzshの場合)。

case ${SSH_CLIENT%% *}//$(/sbin/ifconfig |
                          sed -n 's/^.* addr:\([0-9][0-9.]*\) .*/\1/p' |
                          tr '\n' /)/ in
  "") :;;# local session
  10.42.*/10.42.*) :;; # LAN session
  1.2.3.*/1.2.3.*) :;; # LAN session
  *) unset DISPLAY;; # WAN session
esac
export EDITOR=vim
if [ -n "$DISPLAY" ] && type gvim >/dev/null 2>/dev/null; then
  EDITOR=gvim
fi
export VISUAL="$EDITOR"

LANの場合はオン、LANの場合はオフ?2番目はWANを読む必要がありますが、これは1文字の編集です...
Nils
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.