InfoGrab DocsInfoGrab Docs

서버 접근 문제 해결

요약

이 페이지에서는 Teleport로 서버 접근을 관리할 때 발생할 수 있는 일반적인 문제와 이를 해결하거나 우회하는 방법을 설명합니다. 새 SSH 세션을 시작하면 Teleport는 자체적으로 포크(fork)를 수행하며, 자식 프로세스는 연결을 시도하는 OS 사용자로 실행됩니다.

이 페이지에서는 Teleport로 서버 접근을 관리할 때 발생할 수 있는 일반적인 문제와 이를 해결하거나 우회하는 방법을 설명합니다.

SSH 세션 시작 실패#

새 SSH 세션을 시작하면 Teleport는 자체적으로 포크(fork)를 수행하며, 자식 프로세스는 연결을 시도하는 OS 사용자로 실행됩니다. teleport 바이너리의 파일 시스템 권한에 이 사용자에 대한 실행 권한이 포함되어 있지 않으면 세션 시작에 실패합니다.

이 문제는 새로 설치된 소프트웨어를 어떤 사용자도 실행할 수 없도록 막는 시스템에서 발생할 수 있습니다.

증상#

이 문제가 발생하면 세션이 연결 해제되고 다음과 유사한 오류 메시지가 표시됩니다.

Failed to launch: fork/exec /proc/self/exe: permission denied.
Process exited with status 255

해결 방법#

teleport 바이너리의 권한 설정을 확인해야 합니다.

teleport 바이너리의 파일 시스템 권한을 확인하려면 다음 단계를 따르세요.

  1. teleport 서비스를 설치한 컴퓨터에서 터미널 셸을 엽니다.

  2. 다음 명령을 실행하여 Teleport 바이너리의 위치와 파일 시스템 권한을 확인합니다.

    ls -al $(which teleport)
    

    이 명령은 다음과 유사한 출력을 반환해야 합니다.

    -rwxr-xr-x  1 root  wheel  531849504 Aug 30 18:32 /usr/local/bin/teleport
    

    다른 사용자가 읽고 실행할 수 있도록 허용하는 권한(-rwxr-xr-x)이 보이지 않으면 권한을 업데이트해야 합니다. 예를 들면 다음과 같습니다.

    sudo chmod go+rx $(which teleport)
    
  3. teleport 서비스를 재시작합니다.

싱글 사인온 사용자의 로그인 이름 누락#

외부 아이덴티티 공급자를 사용하여 사용자를 위한 싱글 사인온을 활성화하는 경우, 해당 사용자에게 로그인 이름(login)을 반드시 할당해야 합니다.

증상#

외부 아이덴티티 공급자용 인증 커넥터를 통해 Teleport에 접근할 수 있는 사용자에게 원격 리소스에 접근하는 데 필요한 로그인 이름이 표시되지 않습니다.

해결 방법#

이 문제를 해결하려면 인증 커넥터의 구성에서 싱글 사인온 사용자에게 로그인 이름을 할당하는지 확인하거나, 외부 아이덴티티 공급자에서의 그룹 멤버십을 통해 사용자에게 할당된 Teleport 역할의 트레이트(trait)를 수정해야 합니다. 역할에서 트레이트를 사용하는 방법에 대한 자세한 내용은 역할 템플릿을 참고하세요.

서버 목록에 오프라인 서버가 포함됨#

일부 경우, tsh ls 또는 tctl nodes ls 명령을 실행하면 오프라인 상태인 서버가 포함될 수 있습니다. 예를 들어, Teleport 프록시 서비스로 하트비트 전송을 중단한 서버가 10분 이상 tsh ls 또는 tctl nodes ls 명령의 출력에 계속 사용 가능한 것으로 표시될 수 있습니다.

증상#

응답이 없는 서버가 tsh ls 또는 tctl nodes ls 명령의 출력에 사용 가능한 것으로 표시됩니다. 예를 들어, 이전에 Teleport 프록시 서비스로 하트비트 신호를 전송한 적이 있는 서버가 이후 오프라인 상태가 되었더라도, 이러한 명령 중 하나를 실행하면 다음과 유사한 출력을 볼 수 있습니다.

Node Name      Address        Labels
-------------- -------------- -----------------------
ip-172-3-1-242 127.0.0.1:3022 hostname=ip-172-3-1-242
ip-172-3-1-75  ⟵ Tunnel       hostname=ip-172-3-1-75
ip-172-3-2-177 ⟵ Tunnel       hostname=ip-172-3-2-177

해결 방법#

이전에 하트비트를 전송한 서버가 응답하지 않게 되었는지 조사하려면 --format json 명령줄 옵션과 함께 tsh ls 또는 tctl nodes ls 명령을 실행하여 만료 시간을 포함한 추가 정보를 확인할 수 있습니다. 예를 들면 다음과 같습니다.

    "kind": "node",
    "version": "v2",
    "metadata": {
      "name": "c78612d9-dab4-497f-a4d8-59ddb7edc6e9",
      "labels": {
        "teleport.internal/resource-id": "3547a530-3b58-4f65-8335-c5cf99c7b374"
      },
      "expires": "2023-09-15T21:40:17.653190645Z",
      "id": 1694813417653574518
    },

서버가 정기적으로 하트비트 신호를 전송하고 있다면 expires 값은 비교적 일정하게 유지되어야 하며, 예를 들어 현재 시간으로부터 810분 정도여야 합니다. 만료까지 남은 시간이 일반적인 만료 시간보다 짧다면, 예를 들어 현재 시간으로부터 23분 이내라면, 해당 서버가 하트비트 전송을 중단했을 가능성이 있습니다.

공유 세션에 참여할 수 없음#

Teleport에서는 여러 사용자가 활성 세션을 관찰하거나 참여할 수 있습니다. tsh와 Teleport 웹 UI에서 다른 사용자의 세션에 참여할 수 있는 사용자를 제어하기 위한 규칙을 정의하고 역할 기반 정책을 구성할 수 있습니다. 공유 세션에 참여할 수 없는 경우, 역할 할당을 확인하고 join_session 권한이 포함된 역할을 가지고 있는지 확인해야 합니다. 예를 들면 다음과 같습니다.

kind: role
metadata:
  name: auditor
version: v6
spec:
  allow:
    join_sessions:
      - name: Join prod sessions
        roles: ['prod-access']
        kinds: ['k8s', 'ssh']
        modes: ['moderator', 'observer']

모더레이트 세션과 세션 공유에 대한 자세한 내용은 세션 참여하기를 참고하세요.

root로 에이전트리스 OpenSSH 서버에 연결할 수 없음#

/etc/ssh/sshd_config의 sshd 구성에서 PermitRootLogin no 또는 PermitRootLogin forced-commands-only와 같은 설정이 있는지 확인해야 합니다. 이러한 설정 중 하나가 있으면 root로의 로그인이 차단됩니다. Teleport를 통해 OpenSSH 서버에 root로 로그인하려면 이 설정을 PermitRootLogin prohibit-password로 변경하는 것을 권장합니다.

변경 사항을 적용하려면 sshd를 재시작해야 합니다.

$ sudo systemctl restart sshd

서버 목록에 원하는 호스트 이름 대신 UUID가 표시됨#

일부 상황에서는 tsh ls 명령이 서버를 나열할 때 노드 이름이 의도한 호스트 이름 대신 UUID로 설정되어 표시될 수 있습니다.

Node Name                            Address  Labels
------------------------------------ -------- ------
4c022537-268c-4d8a-a79a-605868ee8a67 ⟵ Tunnel        
ip-172-3-1-75                        ⟵ Tunnel hostname=ip-172-3-1-75
ip-172-3-2-177                       ⟵ Tunnel hostname=ip-172-3-2-177

Teleport SSH 서비스 인스턴스가 클러스터에 조인하면, 해당 인스턴스는 (일반적으로 프록시 서비스를 통해) Teleport Auth 서비스에 상태를 보고하기 시작합니다. Auth 서비스는 다음 패턴에 따라 서버의 이름을 검증합니다.

^[a-zA-Z0-9]+[a-zA-Z0-9\.-]*$

각 서버의 이름은 영숫자 문자로 시작해야 하며, 영숫자 문자, 점, 하이픈만 포함할 수 있습니다. 노드 이름이 이 패턴을 위반하거나 길이가 256자를 초과하면, Auth 서비스는 이를 UUID(서버의 Teleport 리소스 ID)로 대체합니다.

서버를 나열할 때 -v 플래그를 추가하면 유효하지 않은 호스트 이름이 있는지 확인할 수 있습니다.

$ tsh ls -v

Teleport Auth 서비스는 유효하지 않은 호스트 이름을 가진 보호 대상 서버의 라벨을 다음을 포함하도록 재작성합니다.

teleport.internal/invalid-hostname

-v 플래그는 유효하지 않은 호스트 이름을 포함한 내부 라벨을 표시합니다.

유효하지 않은 호스트 이름을 수정하려면, 영향을 받는 서버의 Teleport 구성 파일을 편집한 후 해당 서버를 재시작하세요.

  teleport:
-   nodename: "_myhost"
+   nodename: "myhost"

서버 접근 문제 해결

Teleport v18.9
원문 보기
요약

이 페이지에서는 Teleport로 서버 접근을 관리할 때 발생할 수 있는 일반적인 문제와 이를 해결하거나 우회하는 방법을 설명합니다. 새 SSH 세션을 시작하면 Teleport는 자체적으로 포크(fork)를 수행하며, 자식 프로세스는 연결을 시도하는 OS 사용자로 실행됩니다.

이 페이지에서는 Teleport로 서버 접근을 관리할 때 발생할 수 있는 일반적인 문제와 이를 해결하거나 우회하는 방법을 설명합니다.

SSH 세션 시작 실패#

새 SSH 세션을 시작하면 Teleport는 자체적으로 포크(fork)를 수행하며, 자식 프로세스는 연결을 시도하는 OS 사용자로 실행됩니다. teleport 바이너리의 파일 시스템 권한에 이 사용자에 대한 실행 권한이 포함되어 있지 않으면 세션 시작에 실패합니다.

이 문제는 새로 설치된 소프트웨어를 어떤 사용자도 실행할 수 없도록 막는 시스템에서 발생할 수 있습니다.

증상#

이 문제가 발생하면 세션이 연결 해제되고 다음과 유사한 오류 메시지가 표시됩니다.

Failed to launch: fork/exec /proc/self/exe: permission denied.
Process exited with status 255

해결 방법#

teleport 바이너리의 권한 설정을 확인해야 합니다.

teleport 바이너리의 파일 시스템 권한을 확인하려면 다음 단계를 따르세요.

  1. teleport 서비스를 설치한 컴퓨터에서 터미널 셸을 엽니다.

  2. 다음 명령을 실행하여 Teleport 바이너리의 위치와 파일 시스템 권한을 확인합니다.

    ls -al $(which teleport)
    

    이 명령은 다음과 유사한 출력을 반환해야 합니다.

    -rwxr-xr-x  1 root  wheel  531849504 Aug 30 18:32 /usr/local/bin/teleport
    

    다른 사용자가 읽고 실행할 수 있도록 허용하는 권한(-rwxr-xr-x)이 보이지 않으면 권한을 업데이트해야 합니다. 예를 들면 다음과 같습니다.

    sudo chmod go+rx $(which teleport)
    
  3. teleport 서비스를 재시작합니다.

싱글 사인온 사용자의 로그인 이름 누락#

외부 아이덴티티 공급자를 사용하여 사용자를 위한 싱글 사인온을 활성화하는 경우, 해당 사용자에게 로그인 이름(login)을 반드시 할당해야 합니다.

증상#

외부 아이덴티티 공급자용 인증 커넥터를 통해 Teleport에 접근할 수 있는 사용자에게 원격 리소스에 접근하는 데 필요한 로그인 이름이 표시되지 않습니다.

해결 방법#

이 문제를 해결하려면 인증 커넥터의 구성에서 싱글 사인온 사용자에게 로그인 이름을 할당하는지 확인하거나, 외부 아이덴티티 공급자에서의 그룹 멤버십을 통해 사용자에게 할당된 Teleport 역할의 트레이트(trait)를 수정해야 합니다. 역할에서 트레이트를 사용하는 방법에 대한 자세한 내용은 역할 템플릿을 참고하세요.

서버 목록에 오프라인 서버가 포함됨#

일부 경우, tsh ls 또는 tctl nodes ls 명령을 실행하면 오프라인 상태인 서버가 포함될 수 있습니다. 예를 들어, Teleport 프록시 서비스로 하트비트 전송을 중단한 서버가 10분 이상 tsh ls 또는 tctl nodes ls 명령의 출력에 계속 사용 가능한 것으로 표시될 수 있습니다.

증상#

응답이 없는 서버가 tsh ls 또는 tctl nodes ls 명령의 출력에 사용 가능한 것으로 표시됩니다. 예를 들어, 이전에 Teleport 프록시 서비스로 하트비트 신호를 전송한 적이 있는 서버가 이후 오프라인 상태가 되었더라도, 이러한 명령 중 하나를 실행하면 다음과 유사한 출력을 볼 수 있습니다.

Node Name      Address        Labels
-------------- -------------- -----------------------
ip-172-3-1-242 127.0.0.1:3022 hostname=ip-172-3-1-242
ip-172-3-1-75  ⟵ Tunnel       hostname=ip-172-3-1-75
ip-172-3-2-177 ⟵ Tunnel       hostname=ip-172-3-2-177

해결 방법#

이전에 하트비트를 전송한 서버가 응답하지 않게 되었는지 조사하려면 --format json 명령줄 옵션과 함께 tsh ls 또는 tctl nodes ls 명령을 실행하여 만료 시간을 포함한 추가 정보를 확인할 수 있습니다. 예를 들면 다음과 같습니다.

    "kind": "node",
    "version": "v2",
    "metadata": {
      "name": "c78612d9-dab4-497f-a4d8-59ddb7edc6e9",
      "labels": {
        "teleport.internal/resource-id": "3547a530-3b58-4f65-8335-c5cf99c7b374"
      },
      "expires": "2023-09-15T21:40:17.653190645Z",
      "id": 1694813417653574518
    },

서버가 정기적으로 하트비트 신호를 전송하고 있다면 expires 값은 비교적 일정하게 유지되어야 하며, 예를 들어 현재 시간으로부터 810분 정도여야 합니다. 만료까지 남은 시간이 일반적인 만료 시간보다 짧다면, 예를 들어 현재 시간으로부터 23분 이내라면, 해당 서버가 하트비트 전송을 중단했을 가능성이 있습니다.

공유 세션에 참여할 수 없음#

Teleport에서는 여러 사용자가 활성 세션을 관찰하거나 참여할 수 있습니다. tsh와 Teleport 웹 UI에서 다른 사용자의 세션에 참여할 수 있는 사용자를 제어하기 위한 규칙을 정의하고 역할 기반 정책을 구성할 수 있습니다. 공유 세션에 참여할 수 없는 경우, 역할 할당을 확인하고 join_session 권한이 포함된 역할을 가지고 있는지 확인해야 합니다. 예를 들면 다음과 같습니다.

kind: role
metadata:
  name: auditor
version: v6
spec:
  allow:
    join_sessions:
      - name: Join prod sessions
        roles: ['prod-access']
        kinds: ['k8s', 'ssh']
        modes: ['moderator', 'observer']

모더레이트 세션과 세션 공유에 대한 자세한 내용은 세션 참여하기를 참고하세요.

root로 에이전트리스 OpenSSH 서버에 연결할 수 없음#

/etc/ssh/sshd_config의 sshd 구성에서 PermitRootLogin no 또는 PermitRootLogin forced-commands-only와 같은 설정이 있는지 확인해야 합니다. 이러한 설정 중 하나가 있으면 root로의 로그인이 차단됩니다. Teleport를 통해 OpenSSH 서버에 root로 로그인하려면 이 설정을 PermitRootLogin prohibit-password로 변경하는 것을 권장합니다.

변경 사항을 적용하려면 sshd를 재시작해야 합니다.

$ sudo systemctl restart sshd

서버 목록에 원하는 호스트 이름 대신 UUID가 표시됨#

일부 상황에서는 tsh ls 명령이 서버를 나열할 때 노드 이름이 의도한 호스트 이름 대신 UUID로 설정되어 표시될 수 있습니다.

Node Name                            Address  Labels
------------------------------------ -------- ------
4c022537-268c-4d8a-a79a-605868ee8a67 ⟵ Tunnel        
ip-172-3-1-75                        ⟵ Tunnel hostname=ip-172-3-1-75
ip-172-3-2-177                       ⟵ Tunnel hostname=ip-172-3-2-177

Teleport SSH 서비스 인스턴스가 클러스터에 조인하면, 해당 인스턴스는 (일반적으로 프록시 서비스를 통해) Teleport Auth 서비스에 상태를 보고하기 시작합니다. Auth 서비스는 다음 패턴에 따라 서버의 이름을 검증합니다.

^[a-zA-Z0-9]+[a-zA-Z0-9\.-]*$

각 서버의 이름은 영숫자 문자로 시작해야 하며, 영숫자 문자, 점, 하이픈만 포함할 수 있습니다. 노드 이름이 이 패턴을 위반하거나 길이가 256자를 초과하면, Auth 서비스는 이를 UUID(서버의 Teleport 리소스 ID)로 대체합니다.

서버를 나열할 때 -v 플래그를 추가하면 유효하지 않은 호스트 이름이 있는지 확인할 수 있습니다.

$ tsh ls -v

Teleport Auth 서비스는 유효하지 않은 호스트 이름을 가진 보호 대상 서버의 라벨을 다음을 포함하도록 재작성합니다.

teleport.internal/invalid-hostname

-v 플래그는 유효하지 않은 호스트 이름을 포함한 내부 라벨을 표시합니다.

유효하지 않은 호스트 이름을 수정하려면, 영향을 받는 서버의 Teleport 구성 파일을 편집한 후 해당 서버를 재시작하세요.

  teleport:
-   nodename: "_myhost"
+   nodename: "myhost"