젠투에서 RHEL 서버에 연결하려고 합니다. 둘 다 mosh
설치되었지만 다음 오류가 발생합니다.
petanb@localhost ~/Documents $ mosh root@server
mosh-server needs a UTF-8 native locale to run.
Unfortunately, the local environment ([no charset variables]) specifies
the character set "US-ASCII",
The client-supplied environment ([no charset variables]) specifies
the character set "US-ASCII".
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
Connection to server closed.
/usr/bin/mosh: Did not find mosh server startup message.
RHEL에는 다음과 같은 로케일이 있습니다.
# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
이 문제를 어떻게 해결할 수 있나요?
업데이트: 문제는 젠투 측에 있는 것 같습니다. 데비안 서버에 연결하면 동일한 오류가 발생하고 다른 배포판과 연결하면 문제가 없습니다.
업데이트 2: 추가하여 문제를 해결했습니다.
LANG="en_US.UTF-8"
export LANG
입력하다~/.bashrc
답변1
mosh
장황한 옵션이나 디버그 옵션 은 분명히 ssh
없지만 연결할 때 사용할 명령을 mosh
알려줄 수 있으며 옵션을 추가하면 로케일 변수에서 이를 표시 하도록 할 수 있습니다.ssh
-vvv
ssh
보내다.
예를 들어,
mosh -ssh='ssh -vvv' root@server
당신은 볼 수 있습니다
debug1: Sending env LC_ALL = C
debug2: channel 0: request env confirm 0
POSIX의 경우
debug1: Sending env LC_CTYPE = en_US.UTF-8
debug2: channel 0: request env confirm 0
이는 서버가확인하다사용된 변수. 리모컨은 sshd
구성 설정 또는 사용자 설정(구성)에 따라 일부 환경을 무시할 수 있습니다.AcceptEnv
sshd
SendEnv
ssh
모든 서버가 SSH를 통해 로케일 변수를 허용하는 것은 아닙니다.
구성 설정이 허용되더라도 여전히 가능합니다(특히 다음에 연결하고 있기 때문에).뿌리user)는 누군가 사용자의 로케일이 POSIX여야 한다고 결정했음을 나타냅니다. ~을 위한뿌리, 선택/붙여넣기를 통해 복사하는 데 어려움이 덜하므로 의미가 있습니다.
예를 들어, 일부 시스템은 대화형 사용을 위해 로케일을 설정하는 데 사용됩니다 /etc/profile.d/lang.sh
. 이 스크립트는 시스템마다 다르며 원격 시스템에 전달되지 않는 로케일 정보에 대한 설명을 찾을 때 (ssh/sshd 구성 이후) 고려해야 할 두 번째 위치입니다. Red Hat(CentOS)의 경우 스크립트는 시스템 및 기본 구성에서 정보를 얻으려고 시도합니다. 예를 들면 다음과 같습니다.
if [ -n "$LANG" ]; then
saved_lang="$LANG"
[ -f "$HOME/.i18n" ] && . "$HOME/.i18n" && sourced=1
LANG="$saved_lang"
unset saved_lang
else
for langfile in /etc/locale.conf "$HOME/.i18n" ; do
[ -f $langfile ] && . $langfile && sourced=1
done
fi
SuSE는 다르며 ssh 및 gdm에 대해 가정합니다.앞으로본질적으로 동일한 파일 읽기:
#
# lang.sh: Set interactive language environment
#
# Used configuration files:
#
# /etc/sysconfig/language
# $HOME/.i18n
#
#
# Already done by the remote SSH side
#
test -z "$SSH_SENDS_LOCALE" || return
#
# Already done by the GDM
#
test -z "$GDM_LANG" || return
특정 서버(버전이 지정되지 않음)의 경우 스크립트가 버전마다 다를 수 있습니다. 내 데비안 서버에는 이 파일이 없으며 기본 시스템 로케일과 gdm(다를 수 있음)을 사용하여 대화형 로케일을 설정합니다. X의 대화형 세션(gdm을 통해)을 사용하는 대신 SSH 연결은 시스템 로케일과 다른 값을 사용할 수 있습니다. 이 경우 시스템 로캘을 수정해야 합니다(참조:로케일데비안 위키에서).
답변2
나는 또한 오류 메시지를 만났습니다. 그러나 @Petr이 제공한 해결 방법은 나에게 적합하지 않았습니다. 환경 변수의 값을 LC_ALL
로 설정해야 합니다 . 변수를 en_US.UTF-8
설정해도 아무런 효과가 없습니다(제 생각에는 이미 올바른 값이 있기 때문입니다).LANG
또한 약간의 설명이 있습니다.
다음 날짜에 변경사항을 적용했습니다.고객 환경, 즉 로컬 mosh
명령을 실행하는 위치입니다. 당신은 그렇습니다아니요이렇게 변경하세요.서버 환경, 연결하려는 위치입니다.
이 기사를 처음 발견했을 때 이것은 나에게 직관적이지 않았습니다.
또한 좀 더 명확하게 설명하자면 위에서 언급한 것처럼 제 경우에는 LANG
이미 로 설정되어 있습니다 en_US.UTF-8
. 그러나 다른 다양한 변수는 다르게 설정되어 있습니다.
LANG=en_US.UTF-8
LC_ADDRESS=nl_NL.UTF-8
LC_IDENTIFICATION=nl_NL.UTF-8
LC_MEASUREMENT=nl_NL.UTF-8
LC_MONETARY=nl_NL.UTF-8
LC_NAME=nl_NL.UTF-8
LC_NUMERIC=nl_NL.UTF-8
LC_PAPER=nl_NL.UTF-8
LC_TELEPHONE=nl_NL.UTF-8
LC_TIME=nl_NL.UTF-8
아마도 이로 인해 mosh
앱에 약간의 혼란이 발생할 수 있지만 ssh
이에 대해 소란은 없습니다.
제 경우에는 Pop!_OS 22.04 클라이언트 환경에서 Unbuntu 22.04 서버 환경으로 연결하고 있습니다.
힌트
LC_ALL
전체 셸의 변수를 변경하는 대신 다음 별칭을 사용할 수도 있습니다 .
alias mosh="export LC_ALL=\"en_US.UTF8\" && mosh"
답변3
AskUbuntu에 대한 답변입니다.내 문제를 해결했습니다.
(이 해결 방법은 이 문제가 발생한 Debian 서버 사용자를 위한 것이며 특정 문제와는 별개입니다.) 내 컴퓨터는 Proxmox에서 처리하는 Debian LX 컨테이너입니다.
내 컴퓨터에 locales
패키지가 설치되어 있지만 다시 구성해야 합니다.
sudo dpkg-reconfigure locales
좀 더 구체적인 정보를 확인하실 수 있습니다여기. 일부 컴퓨터에는 이 명령이 있는 것 같습니다 locale-gen
(내 컴퓨터에는 없습니다).