쉘이 원격 SSH 세션에 속하는지 어떻게 감지합니까?

쉘이 원격 SSH 세션에 속하는지 어떻게 감지합니까?

내 문제는 다음과 비슷합니다이것, 하지만 약간 다른 것을 찾고 있습니다. 두 가지 시나리오에서 네트워크의 Linux 시스템에 액세스하는 데 사용하는 랩톱이 있습니다.

  • 네트워크에 직접 유선으로 연결되어 있습니다.

  • 네트워크에 간접적으로 연결되어 있습니다. 네트워크에는 인터넷에 노출된 게이트웨이 시스템이 있으며 이를 사용하여 네트워크의 호스트에 대한 SSH 터널을 설정할 수 있습니다. 이는 분명히 더 느리고 대기 시간이 더 긴 연결입니다.

내 홈 디렉토리는 모든 컴퓨터에서 네트워크 에 액세스할 수 있으므로 내 .bashrc. .bashrc내 로컬 컴퓨터에 로그인하지만 처리하기 쉬워야 합니다.) 나는 이런 일을하고 싶다 :

  • alias ssh ssh -X로컬 네트워크에 있지만 인터넷을 통한 X 전달을 사용하고 싶지 않은 경우.

  • export EDITOR=gvim로컬 네트워크에 있을 때, export EDITOR=vim원격에 있을 때.

등. 이전 답변에 따르면 SSH_CLIENT콘텐츠(존재하는 경우)를 확인하고 클라이언트 IP 주소가 로컬 시스템의 네트워크 어댑터 중 하나와 일치하는지 확인하여 비슷한 작업을 수행 할 수 있을 것 같습니다 . 나는 이를 달성하기 위한 더 유연하고 더 강력한 방법이 있는지 알아보겠다고 생각했습니다.

答え1

SSH 세션을 감지하려면 $SSH_CLIENT.

로컬 세션과 원격 세션을 구별하기 위해 클라이언트 측 또는 서버 측의 두 가지 접근 방식이 있습니다. 서버 측에서는 $SSH_CLIENT로컬 IP 주소 또는 라우팅 테이블과 비교하여 일반적으로 연결이 LAN에서 오는지 알려줍니다. 클라이언트 측에서는 LAN 호스트 및 WAN 호스트로 설정 ForwardX11해야 할 수도 있습니다 . 이는 웹사이트마다 콘텐츠가 다르다는 것을 의미합니다 . 저는 쉘 스크립트를 사용하여 콘텐츠를 생성했습니다.~/.ssh/configyesno~/.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"

関連情報