SSH 클라이언트가 TERM 환경 변수를 서버에 전달하는 것을 방지하시겠습니까?

SSH 클라이언트가 TERM 환경 변수를 서버에 전달하는 것을 방지하시겠습니까?

나는 현재 사용하고 있습니다페도라 모자18그놈 터미널, 그리고 시작tmux멀티플렉서가 그중 하나입니다. 내가 연결할 때중앙 운영 체제명령 5 server 를 통해 다음을 ssh찾았습니다.

  • ls결과는 색상이 없습니다
  • tmux, screen, hexedit, htop모두 시작할 수 없습니다. 오류 메시지는 다음과 같습니다.
    터미널을 열지 못했습니다: 터미널이 없거나 부적합합니다: screen-256color

$TERM 환경 변수가 서버에 전달되는 것 같은데 sshFedora 18 설명서에서는 찾을 수 없습니다./etc/ssh/ssh_config

서버에서 $TERM 변수를 수동으로 변경할 수 있지만 연결할 때마다 이런 일이 다시 발생합니다. 그렇다면 이런 일이 발생하지 않도록 어떻게 방지할 수 있습니까?

답변1

$TERM통신하는 방법을 알 수 있도록 어떤 터미널과 통신하고 있는지 애플리케이션에 알려주는 것입니다.

원격 호스트가 지원하고 터미널과 최대한 일치하는 값으로 변경합니다( screen).

대부분의 Linux 시스템에는 적어도 하나의 screenterminfo 항목이 있어야 합니다. 그렇지 않은 경우 screen이는 구현의 상위 집합 vt100이며 vt100보편적입니다. 그래서:

TERM=screen ssh host

또는

TERM=vt100 ssh host

256색 지원이 필요한 경우 xterm-256color충분히 가까운 색상을 시도해 보고( screen동일한 방식으로 256색 지원 xterm) 터미널 응용 프로그램이 256색을 지원한다고 응용 프로그램에 알리고 사용 방법을 알려줄 수 있습니다.

또는 원격 호스트에 terminfo 항목을 설치할 수 있습니다.

infocmp -x | ssh -t root@remote-host '
  cat > "$TERM.info" && tic -x "$TERM.info"'

답변2

내 경우에는 방금 로컬 데스크톱에 별칭을 추가했습니다 .zshrc(bash를 사용하는 경우)..bashrc

alias ssh='TERM=xterm ssh'

이미 별칭을 사용하고 있는 경우 환경 할당을 포함하도록 조정하세요.

답변3

변경하면 $TERM효과가 있을 수 있지만 권장하지는 않습니다. 이는 해결 방법일 뿐 해결책은 아닙니다.

내 시스템에서 이 문제가 발생했을 때 원격 시스템에 가장 일반적인 터미널 유형에 대한 지원을 설치하여 문제를 해결했습니다.

  • yum install ncurses-basescreen-256colorCentOS에서 사용 가능
  • yum install ncurses-termscreen-256color-bceCentOS에서 사용 가능
  • apt install ncurses-base데비안, 우분투, 민트 screen-256color에서 사용 가능screen-256color-bce

ncurses 관련 패키지는 다른 많은 터미널에 대한 지원도 제공하며 다른 모든 대규모 배포판에서도 사용할 수 있습니다. (그러나 내 사용 사례와 귀하의 질문에 대해서는 이것이 충분한 정보가 될 것입니다)

답변4

man ssh_config를 참조하세요:

 SendEnv
         Specifies what variables from the local environ(7) should be sent
         to the server.  Note that environment passing is only supported
         for protocol 2.  The server must also support it, and the server
         must be configured to accept these environment variables.  Refer
         to AcceptEnv in sshd_config(5) for how to configure the server.
         Variables are specified by name, which may contain wildcard char‐
         acters.  Multiple environment variables may be separated by
         whitespace or spread across multiple SendEnv directives. The
         default is not to send any environment variables.

그리고 남자 sshd_config:

 AcceptEnv
         Specifies what environment variables sent by the client will be
         copied into the session's environ(7).  See SendEnv in
         ssh_config(5) for how to configure the client.  Note that envi-
         ronment passing is only supported for protocol 2.  Variables are
         specified by name, which may contain the wildcard characters `*'
         and `?'.  Multiple environment variables may be separated by
         whitespace or spread across multiple AcceptEnv directives.  Be
         warned that some environment variables could be used to bypass
         restricted user environments.  For this reason, care should be
         taken in the use of this directive.  The default is not to accept
         any environment variables.

이에 따르면 기본적으로 어떠한 변수도 보내지 않는 것이 기본인데 TERM은 특별한 것 같습니다. 아무튼 선물로 드렸습니다.

따라서 ssh를 호출할 때 TERM을 변경하거나( 처럼 TERM=xterm ssh ...), 로그인 후에 이를 변경하거나( 처럼 .bash_profile), 서버 측에서 알 수 없는 TERM 유형을 정의할 수 있습니다(루트 액세스 권한이 있다고 가정). 자세한 내용은 다른 답변을 참조하세요.

관련 정보