힌트

힌트

젠투에서 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-vvvssh보내다.

예를 들어,

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구성 설정 또는 사용자 설정(구성)에 따라 일부 환경을 무시할 수 있습니다.AcceptEnvsshdSendEnvssh

모든 서버가 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(내 컴퓨터에는 없습니다).

관련 정보