~/.ssh/rc에서 ssh와 scp를 구별하는 방법은 무엇입니까?

~/.ssh/rc에서 ssh와 scp를 구별하는 방법은 무엇입니까?

neofetchOpenSSH를 통해 원격 서버에 로그인할 때마다 (배너를 표시하는 작은 유틸리티)를 시작 하고 싶습니다 . 그래서 /usr/bin/neofetch방금 파일에 추가했는데 ~/.ssh/rc제대로 작동합니다. 문제는 서버에 갈 때에도 ~/.ssh/rc구문 분석된다는 것입니다. scp전체 scp명령은 잘 작동하지만 자동 완성 기능을 사용하려고 할 때 문제가 발생합니다. scp입력하면 <Tab><Tab>원격 서버에서 사용 가능한 파일/폴더가 표시됩니다. 예를 들면 다음과 같습니다.

$ scp remote-host:/t <TAB><TAB>
\\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\`\\\"\\\"\\\"\\\  
\\\ \\\$\\\$\\\:\\\ \\\ \\\ \\\ \\\ \\\ \\\$\\\$.\\\ \\\ \\\ ^[\\\[0m^[\\\[31m^[\\\[1m-^[\\\[0m^[\\\[1m\\\ \\\ \\\ \\\ \\\,d\\\$\\\$\\\'\\\  
\\\ \\\ \\\ \\\ \\\ \\\`\\\$\\\$b.\\\  
\\\ \\\,\\\$\\\$P\\\'\\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\`\\\$\\\$\\\$.\\\  
\\\ \\\$\\\$P\\\ \\\ \\\ \\\ \\\ \\\ d\\\$\\\'\\\ \\\ \\\ \\\ \\\ ^[\\\[0m^[\\\[31m^[\\\[1m\\\,^[\\\[0m^[\\\[1m\\\ \\\ \\\ \\\ \\\$\\\$P\\\  
\\\'\\\,\\\$\\\$P\\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\,ggs.\\\ \\\ \\\ \\\ \\\ \\\`\\\$\\\$b\\\:\\\  
\\\ \\\$\\\$\\\;\\\ \\\ \\\ \\\ \\\ \\\ Y\\\$b._\\\ \\\ \\\ _\\\,d\\\$P\\\'\\\  
^[\\\[0m^[\\\[1m\\\ \\\`\\\$\\\$b\\\ \\\ \\\ \\\ \\\ \\\ ^[\\\[0m^[\\\[31m^[\\\[1m\\\"-.__\\\  
^[\\\[0m^[\\\[1m\\\ \\\ \\\`Y\\\$\\\$\\\ 
(...)

일반적으로 (예를 들어)로 시작하는 파일/폴더를 표시 $ scp remote-host:/t <TAB><TAB>하지만 이제는 배너를 표시합니다./t/tmpneofetch

구별할 수 있는 방법이 있나요 $ ssh(서버에 들어갈 때만 시작되고, 서버에 들어갈 때는 시작되지 않음 $ scp)?~/.ssh/rcneofetchsshscp

참고: 나는 bash를 시작할 때마다 neofetch를 시작하고 싶지 않으며 로그인 쉘을 시작할 때마다 neofetch를 시작하고 싶지도 않으므로 이를 넣거나 /etc/bash.bashrc빼는 /etc/profile것은 옵션이 아닙니다. SSH 연결 후에 시작하고 싶습니다.

나는 몇 가지 조사를 하고 몇 가지를 시도했습니다.

  • 에서 영감을 받다이 게시물, 나는 다음을 시도했습니다.

    if [ -t 0 ]; then /usr/bin/neofetch; fi

    그리고

    if tty > /dev/null; then /usr/bin/neofetch; fi

    하지만 작동하지 않습니다( neofetch한 번도 시작하지 않았으며 이후에도 시작하지 않음 $ ssh).

  • 고무하다그 포스팅을 통해서$-, 또한 대화형 세션과 비대화형 세션을 구별하기 위해 환경 변수를 사용해 보았지만 ~/.ssh/rcbash가 아닌 대시로 구문 분석했기 때문에 작동하지 않았습니다(그리고 $-bash 변수였습니다).

그러나 나는 작동하는 해결책을 찾았습니다(음, 일종의...). 탁월한이 글을 통해:

  • 서버에 ~/.ssh/rc다음을 입력합니다.

    if [ ! "$LC_SCP" = "yes" ]; then /usr/bin/neofetch; fi

  • 클라이언트에서는 LC_SCP다음과 같이 환경 변수를 설정 해야 합니다 $ scp.

$ export LC_SCP=yes

$ scp -o SendEnv=LC_SCP remote-host:/t<TAB><TAB>
(works, doesn't launch neofetch)

작동하지만 번거롭습니다. 및 의 세션을 ssh구별 하는 더 좋은 방법이 없습니까 ?scp~/.ssh/rc

답변1

환경변수는 ing시 SSH_TTY에만 설정되고 ing시에는 설정되지 않는 것 같습니다. 따라서 다음이면 충분합니다(적어도 내 테스트에서는).sshscp

if [ -n "$SSH_TTY" ]; then /usr/bin/neofetch; fi

(가치가 무엇인지는 출력을 보고 추측했습니다 env | grep -i ssh.)

관련 정보