원격 SSH 세션에서 셸을 소유 한시기를 감지하는 방법은 무엇입니까?


9

내 질문은 유사하다 이 하나 ,하지만 약간 다른 뭔가를 찾고 있어요. 두 가지 시나리오에서 네트워크의 Linux 시스템에 액세스하는 데 사용하는 노트북 PC가 있습니다.

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

  • 네트워크에 간접적으로 연결되어 있습니다. 네트워크에 인터넷에 노출 된 게이트웨이 시스템이 있는데, 네트워크의 호스트에 SSH 터널을 설정하는 데 사용할 수 있습니다. 이것은 분명히 훨씬 느리고 지연 시간이 긴 연결입니다.

내 홈 디렉토리는 모든 컴퓨터에서 네트워크에 액세스 할 수 있으므로 내 사본을 공유합니다 .bashrc. .bashrc두 가지 시나리오 중 어느 시나리오에 있는지 감지하고 그에 따라 행동하는 기능을 추가하고 싶습니다 (기술적으로 세 가지 시나리오가 있습니다. 세 번째 시나리오는 로컬 컴퓨터에 로그인하고 있지만 쉽게 처리해야 함). ). 나는 다음과 같은 일을하고 싶다 :

  • alias ssh ssh -X 로컬 네트워크에 있지만 인터넷을 통해 X 전달을 사용하고 싶지 않습니다.

  • export EDITOR=gvim로컬 네트워크에 있지만 export EDITOR=vim원격에있을 때는

등등. 이전 답변을 바탕으로 SSH_CLIENT(있는 경우) 내용을 확인 하고 클라이언트 IP 주소가 로컬 컴퓨터의 네트워크 어댑터 중 하나와 일치하는지 확인하여 이와 같은 것을 수행 할 수 있어야 합니다. 나는 이것을 달성하기 위해 더 매끄 럽거나 더 견고한 방법이 있는지 알 것이라고 생각했다.

답변:


10

SSH 세션을 감지하려면을 사용하십시오 $SSH_CLIENT.

로컬 세션과 원격 세션을 구별하기 위해 클라이언트 측 또는 서버 측의 두 가지 방법이 있습니다. 서버 측 $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에 대해 끄시겠습니까? 두 번째는 WAN을 읽어야합니다. 그러나 그것은 단일 문자 편집입니다.
Nils
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.