나는 현재 사용하고 있습니다페도라 모자18그놈 터미널, 그리고 시작tmux
멀티플렉서가 그중 하나입니다. 내가 연결할 때중앙 운영 체제명령 5 server 를 통해 다음을 ssh
찾았습니다.
ls
결과는 색상이 없습니다tmux
,screen
,hexedit
,htop
모두 시작할 수 없습니다. 오류 메시지는 다음과 같습니다.터미널을 열지 못했습니다: 터미널이 없거나 부적합합니다: screen-256color
$TERM 환경 변수가 서버에 전달되는 것 같은데 ssh
Fedora 18 설명서에서는 찾을 수 없습니다./etc/ssh/ssh_config
서버에서 $TERM 변수를 수동으로 변경할 수 있지만 연결할 때마다 이런 일이 다시 발생합니다. 그렇다면 이런 일이 발생하지 않도록 어떻게 방지할 수 있습니까?
답변1
$TERM
통신하는 방법을 알 수 있도록 어떤 터미널과 통신하고 있는지 애플리케이션에 알려주는 것입니다.
원격 호스트가 지원하고 터미널과 최대한 일치하는 값으로 변경합니다( screen
).
대부분의 Linux 시스템에는 적어도 하나의 screen
terminfo 항목이 있어야 합니다. 그렇지 않은 경우 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-base
screen-256color
CentOS에서 사용 가능yum install ncurses-term
screen-256color-bce
CentOS에서 사용 가능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 유형을 정의할 수 있습니다(루트 액세스 권한이 있다고 가정). 자세한 내용은 다른 답변을 참조하세요.