SSH 로그인 후 즉시 호스트 이름 변수 설정

SSH 로그인 후 즉시 호스트 이름 변수 설정

원격 호스트에 연결하고 일부 데몬 프로세스(있는 경우 hadoop)를 시작하는 일련의 (타사) 셸 스크립트가 있습니다. 이 스크립트는 pid 폴더, 데이터 디렉터리 등을 구성하기 위해 호스트 이름에 크게 의존합니다.

지금 해야 할 일은 Arch를 사용하여 독립형 컴퓨터에서 테스트/개발 환경을 만드는 것입니다. 이는 다음을 의미합니다.

  • 127.0.0.1에 data1, data2, data3과 같은 별칭을 제공하도록 /etc/hosts를 구성합니다(이것은 사소한 부분입니다).
  • localhost에 대한 비밀번호 없는 SSH 액세스 구성(이 역시 쉽습니다)
  • 어떻게든 "ssh data1"을 사용하여 연결한 것처럼 현재 SSH 세션의 호스트 이름을 설정합니다. 그러면 호스트 이름은 "data1"이어야 합니다. 알아낼 수 없습니다.

따라서 두 가지 문제를 해결해야 합니다.

  • 일부 환경 변수 또는 원격 호스트와 유사한 것을 전달하여 원격 호스트의 모든 스크립트에 표시되도록 하려면 어떻게 해야 합니까?
  • 해당 세션의 원격 호스트에만 호스트 이름을 설정하는 방법

그리고 이 모든 일은 같은 컴퓨터에서 일어납니다.

답변1

시스템의 호스트 이름은 일반적인 사용을 위해 프로그래밍 방식으로 설정할 수 없으며 이를 효과적으로 변경할 수 있는 환경 변수도 없습니다.

예를 들어 변수가 표시될 수 있지만 $HOSTNAME이는 일반적으로 편의를 위한 것이며 의미 있는 방식으로 시스템의 호스트 이름을 변경하지 않습니다.

내가 당신이라면 내가 선택한 환경 변수를 선택하여 로그인 시 사용자 환경의 일부로 설정한 다음 시스템 호스트 이름의 실제 환경 변수로 작업하는 대신 스크립트에서 해당 변수 다운스트림을 사용할 것입니다. .

호스트 이름 명령

다음 명령을 실행하여 허용적인 방식으로 시스템 이름을 변경할 수 있습니다.

$ sudo hostname <somename>

그러나 호스트 이름은 종종 여러 위치에 저장되고 일부는 시작 중에 한 번만 읽혀지고 다시는 읽히지 않기 때문에 이 접근 방식은 까다로울 수 있습니다.

이를 감안할 때 이것이 어려운 길이고 간단한 방법으로 시스템의 호스트 이름을 무시하려면 많은 해킹과 슬래싱이 필요하다는 것을 알았습니다.

이 작업을 수행하려고 할 때 발생할 수 있는 몇 가지 문제를 보여주는 이 가이드를 남겨드리겠습니다. 제목은 다음과 같습니다.Linux 시스템의 호스트 이름을 변경하는 방법.

답변2

개별 프로세스의 호스트 이름을 변경할 수는 없지만(음,가능한네임스페이스를 사용할 수 있음) HOSTNAME환경 변수를 변경할 수 있습니다.

클라이언트에서 서버로 환경 변수를 전달하는 방법에 대해서는 AcceptEnvPermitUserEnvironment선택을 참조 sshd하세요 (자세한 내용은 매뉴얼 페이지 참조 ) .SendEnvsshsshd_config(5)ssh_config(5)

답변3

SSH는 일반적으로 안전하고 시스템 독립적인 것으로 간주되는 일부 환경 변수, 즉 로케일 종속 환경 변수를 전달하도록 설정됩니다 . LC_*따라서 많은 설치에서 다음과 같은 변수를 설정하여 환경을 통해 데이터를 전달할 수 있습니다. LC_DESIRED_HOSTNAME서버가 전달할 수 있는 환경 변수는 다음의 AcceptEnv설정에 따라 결정됩니다.sshd_configSendEnv, 클라이언트가 전달하려고 시도하는 환경 변수는 다음의 설정에 따라 결정됩니다.~/.ssh/config.

hostname인수를 루트로 사용하여 명령을 호출하면 다음 재부팅까지 모든 프로세스의 호스트 이름을 설정할 수 있습니다.

Linux에서 실행되면 unshare -u someprogram해당 someprogram하위 항목은 별도의 프로세스에서 실행됩니다.네임스페이스자체 호스트 이름이 있습니다. 네임스페이스 내의 호스트 이름은 시스템의 나머지 부분과 동일하게 시작되지만 독립적으로 변경될 수 있습니다. 커널 버전이 3.8 이상이 아니면 루트로 이 작업을 수행해야 합니다.

unshare -u -- sh -c 'hostname "$LC_HOSTNAME"; service hadoop start'

관련 정보