ssh를 호출 할 때 $ TERM의 값을 변경할 수 있습니까?


21

로컬 터미널에는 TERM = konsole-256color가 있지만이 정의를 갖기 위해 연결하는 모든 원격 시스템은 아닙니다.

ssh가 원격 시스템의 TERM을 변경할 수 있습니까? 로컬 컴퓨터에서 구성을 변경하여 원격 컴퓨터에서 .bash * 스크립트를 변경하지 않고?

답변:


9

내 .bashrc 파일에 다음 별칭을 추가했습니다. OG의 답변을 사용하지만 별칭으로 래핑합니다. 매력처럼 작동합니다.)

# Force xterm-color on ssh sessions
alias ssh='TERM=xterm-color ssh'

터미널에서 ssh를 사용하면 작동합니다. 그러나 ssh를 실행하는 여러 스크립트가 있으며 별칭이 확장되지 않았습니다. 각각 별개의 별명을 만들 수있는 방법이 있습니까?
Thayne

스크립트에 특정 TERM 값이 필요한 경우 스크립트 자체에서 해당 varialble을 설정하는 것이 가장 좋습니다. 아니면 옵션이 아닌가?
요한

그것은 실제로 옵션이 아닙니다. 또한이 스크립트는 일부 매개 변수를 기반으로 서버를 선택하고 해당 서버 (또는 tmux 세션의 서버)에 대한 ssh 세션을 엽니 다. 스크립트 자체는 TERM 값에 의존하지 않습니다.
Thayne

이 경우 다음을 사용하여 bash 프로파일 또는 별도의 별명 스크립트를 스크립트에 포함시킬 수 있습니다. shopt -s expand_aliases; ~ / .bash_aliases 출처
Johan

7
TERM=vt100 ssh some.host.name

원격에서 echo $ TERM을 실행하십시오 .


나는 그것에 대해 있지만, 내가 ssh하는 호스트의 하위 집합에 대해서만 설정하기를 원하므로 TERM = ... ssh를 발행하면 항상 작동하지 않습니다. 어떤 호스트에 오래된 termcap 정보가 있는지 기억 한 다음 명령을 즉시 변경하는 것도 좋지 않습니다.

호스트 별 구성은 / etc / ssh / ssh_config에서만 지원되지만 호스트 당 터미널 스키마 매핑을 지원하는 구성 값은 없습니다.
OG

~ / .ssh / config에서도 수행 할 수 있지만 원격 서버로 전송 된 환경을 수정하는 옵션을 찾을 수 없습니다. 내가 뭔가를 놓치고 싶어했다.

7

남자 ssh :

     ssh reads ~/.ssh/environment, and adds lines of the format
     “VARNAME=value” to the environment if the file exists and users are
     allowed to change their environment.  For more information, see the
     PermitUserEnvironment option in sshd_config(5).

편집하다:

쥐, 나는 그것이 로컬에있을 수 있기를 희망했지만 여전히 의지가 있다면 방법이 있습니다. 남자 ssh_conf :

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 구성에 따라 "원격 파일 수정 없음"요구 사항을 충족하거나 충족하지 못할 수 있습니다.


1
예, 그러나 이것은 원격 측의 구성이며 로컬 끝에서만 변경되는 것이 필요합니다.

4
SendEnv는 관련이 없습니다. 그것은 수있는 가능성이 추가 ENV 변수를 보내지 만 : 1은 수정할 수 없으며, 2 TERM 그것이 SendEnv에 목록에없는 경우에도, 어쨌든 전송됩니다.

5

여기에 방금 던진 빠르고 더러운 솔루션이 있습니다. 더 나은 것을 선호합니다. 쉘 스크립트를 대신 사용할 수 있다고 생각합니다. TERM값 조정 은 독자에게 연습으로 남습니다.

# To move into a separate plugin...
function ssh {
   if [[ "${TERM}" = screen* || konsole* ]]; then
     env TERM=screen ssh "$@"
   else
     ssh "$@"
   fi
}

이상적으로는 다른 연결에서 TERM을 확인하는 것과 같은 작업을 수행하여 ControlPersist여러 연결의 긴 지연을 방지하는 것을 사용합니다 .


감사! 나는 이런 일을했지만 대신 특정 값에 대한 검사의 $TERMif/ else구조, 내가 사용하고 $(echo -n "$TERM" | sed -e s/tmux/screen/)무조건 더 보편적으로 받아 들여 "화면"유형 (내 지역 용어의 문제 "TMUX"를 대체하기 위해 여기 소스 ).
wincent
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.