Live Share의 보안 기능Security features of Live Share

Visual Studio Live Share의 공동 작업 세션은 세션에 조인 하 고 공동 편집, 디버그 등의 작업을 수행할 수 있는 강력한 기능입니다.Collaboration sessions in Visual Studio Live Share are powerful in that they allow any number of people to join in a session and collaboratively edit, debug and more. 그러나 이러한 액세스 수준을 고려 하면에서 제공 하 Live Share 보안 기능에 관심이 있을 것입니다.However, given this level of access, you undoubtedly will be interested in the security features Live Share provides. 이 문서에서는 필요에 따라 환경을 보호 하기 위한 몇 가지 권장 사항 및 옵션을 제공 합니다.In this article, we'll provide some recommendations and options for securing your environment as needed.

공동 작업 도구와 마찬가지로 신뢰할 수 있는 사용자와 코드, 콘텐츠 및 응용 프로그램을 공유 하기만 하면 됩니다.As with any collaboration tool, remember that you should only share your code, content, and applications with people you trust.

연결Connectivity

피어 간 세션을 시작할 때 Live Share 피어 투 피어 연결을 설정 하려고 시도 하는 경우 (예: 방화벽/t s p s로 인 한)이 가능 하지 않은 경우 (예: 방화벽/t s p s)는 클라우드 릴레이를 사용 하 여 대체 합니다.When initiating a session between peers, Live Share attempts to establish a peer-to-peer connection, and only if that isn't possible (e.g. due to firewalls/NATs), does it fall back to using a cloud relay. 그러나 두 연결 유형 (P2P 또는 relay)에서 피어 간에 전송 되는 모든 데이터는 SSH 프로토콜을 사용 하 여 종단 간 암호화 됩니다.However, in both connection types (P2P or relay), all data transmitted between peers is end-to-end encrypted using the SSH protocol. 릴레이 연결의 경우 SSH 암호화는 TLS 암호화 Websocket 위에 계층화 됩니다.In the case of a relay connection, the SSH encryption is layered on top of TLS-encrypted WebSockets. 즉, Live Share는 보안을 위해 클라우드 릴레이 서비스에 의존 하지 않습니다.This means that Live Share doesn't depend on the cloud relay service for security. 릴레이가 손상 된 경우에도 Live Share 통신의 암호를 해독할 수 없습니다.Even if the relay was compromised, it could not decrypt any of the Live Share communication.

Live Share 서비스의 역할은 사용자 인증 및 세션 검색으로 제한 됩니다.The role of the Live Share service is limited to user authentication and session discovery. 서비스 자체는 세션의 콘텐츠를 저장 하거나 액세스 권한을 보유 하지 않습니다.The service itself does not store or ever have access any of the content of a session. Live Share의 모든 사용자 콘텐츠는 SSH 세션을 통해 전송 됩니다.All user content in Live Share is transmitted over the SSH session. 여기에는 코드, 터미널, 공유 서버 및이를 기반으로 하는 Live Share 또는 확장에서 제공 하는 기타 공동 작업 기능이 포함 됩니다.That includes code, terminals, shared servers, and any other collaboration features provided by Live Share or extensions that build on it.

이러한 동작 및 Live Share의 연결 요구 사항 변경에 대 한 자세한 내용은 Live Share 연결 요구 사항 을 참조 하세요.To find out more about altering these behaviors and Live Share's connectivity requirements, see connectivity requirements for Live Share.

실시간 암호화Wire Encryption

SSH 프로토콜은 Diffie-Hellman 키 교환을 사용 하 여 세션에 대 한 공유 암호를 설정 하 고 AES 대칭 암호화를 위한 키에서 파생 됩니다.The SSH protocol uses a Diffie-Hellman key-exchange to establish a shared secret for the session, and derives from that a key for AES symmetric encryption. 암호화 키는 세션 기간 동안 주기적으로 회전 됩니다.The encryption key is rotated periodically throughout the duration of the session. 공유 세션 암호 및 모든 암호화 키는 양쪽 모두 메모리 내에서 유지 관리 되며 세션 기간 동안만 유효 합니다.The shared session secret and all encryption keys are only maintained in-memory by both sides, and are only valid for the duration of the session. 이러한 메시지는 디스크에 기록 되거나 서비스 (Live Share 포함)로 전송 되지 않습니다.They are never written to disk or sent to any service (including Live Share).

피어 인증Peer Authentication

또한 SSH 세션은 양방향 인증입니다.The SSH session is also two-way authenticated. 호스트 (SSH 서버 역할)는 SSH 프로토콜에 대 한 표준으로 공개/개인 키 인증을 사용 합니다.The host (SSH server role) uses public/private key authentication as is standard for the SSH protocol. 호스트는 Live Share 세션을 공유 하는 경우 세션에 대 한 고유한 RSA 공개/개인 키 쌍을 생성 합니다.When a host shares a Live Share session, it generates a unique RSA public/private key-pair for the session. 호스트 개인 키는 호스트 프로세스의 메모리에만 유지 됩니다. 디스크에 기록 되거나 Live Share 서비스를 비롯 한 모든 서비스로 전송 되지 않습니다.The host private key is kept only in memory in the host process; it is never written to disk or sent to any service including the Live Share service. 호스트 공개 키는 게스트에서 초대 링크를 통해 액세스할 수 있는 세션 연결 정보 (IP 주소 및/또는 릴레이 끝점)와 함께 Live Share 서비스에 게시 됩니다.The host public key is published to the Live Share service along with the session connection information (IP address and/or relay endpoint) where guests can access it via the invitation link. 게스트가 호스트의 SSH 세션에 연결 되 면 게스트는 SSH 호스트 인증 프로토콜을 사용 하 여 호스트가 게시 된 공개 키에 해당 하는 개인 키를 보유 하 고 있는지 확인 합니다 (게스트는 실제로 개인 키를 볼 수 없음).When a guest connects to the host's SSH session, the guest uses the SSH host authentication protocol to validate that the host holds the private key corresponding to the published public key (without the guest actually getting to see the private key).

게스트는 Live Share 토큰을 사용 하 여 호스트에 대해 자신을 인증 합니다.The guest uses a Live Share token to authenticate itself with the host. 토큰은 사용자 id에 대 한 클레임을 포함 하는 Live Share 서비스에서 발급 한 서명 된 JWT로, MSA, AAD 또는 GitHub 로그인을 통해 가져옵니다.The token is a signed JWT issued by the Live Share service that includes claims about the user identity (obtained via MSA, AAD, or GitHub sign-in). 또한 토큰은 특정 Live Share 세션 (초대 링크가 있거나 호스트에 의해 특별히 초대 됨)에 액세스할 수 있음을 나타내는 클레임을 포함 합니다.The token also has claims that indicate the guest is allowed to access that specific Live Share session (because they had the invitation link and/or they were specifically invited by the host). 호스트는이 토큰의 유효성을 검사 하 고, 클레임을 확인 하 고 (옵션에 따라 호스트 사용자에 게 메시지를 표시할 수 있음) 게스트가 세션에 참여 하도록 허용 합니다.The host validates that token and checks the claims (and depending on options may prompt the host user) before allowing the guest to join the session.

초대 및 조인 액세스Invitations and join access

새 공동 작업 세션을 시작할 때마다 Live Share 초대 링크에 배치 되는 새 고유 식별자 를 생성 합니다.Each time you start a new collaboration session, Live Share generates a new unique identifier that is placed in the invitation link. 이러한 링크는 링크의 식별자가 "비 추측할"이 고 단일 공동 작업 세션이 지속 되는 동안에만 유효 하기 때문에 신뢰할 수 있는 견고한 보안 기반을 제공 합니다.These links provide a solid, secure foundation to invite those you trust since the identifier in the link is "non-guessable" and is only valid for the duration of a single collaboration session.

예기치 않은 게스트 제거Removing an unexpected guest

호스트인 경우 게스트가 공동 작업 세션에 가입할 때마다 자동으로 알림이 표시 됩니다.As a host, you are automatically notified whenever a guest joins the collaboration session.

Visual Studio Code join notification Visual Studio join notification

그래도 알림이 표시 되지 않는 이유로 인해 조인 된 게스트를 제거 하는 기능을 제공 합니다.Better still, the notification gives you the ability to remove a guest that has joined if for some reason you do not know them. (예를 들어 회사 전체 채팅 시스템에서 실수로 링크를 게시 하 고 임의의 직원을 조인 하는 경우) 표시 되는 알림에서 "제거" 단추를 클릭 하기만 하면 공동 작업 세션에서 제거 됩니다.(For example, if you accidentally posted your link on a company-wide chat system and a random employee joined.) Simply click on the "Remove" button in the notification that appears and they will be ejected from the collaboration session.

VS Code 에서 조인 알림을 해제 한 경우에도 참가자를 제거할 수 있습니다.In VS Code, even if you have dismissed a join notification, you also have the ability to remove a participant after that. 탐색기에서 Live Share 보기 또는 VS Code 활동 표시줄의 사용자 지정 탭을 열어 참가자의 이름을 마우스로 가리키거나 마우스 오른쪽 단추로 클릭 하 고 "참가자 제거" 아이콘 또는 옵션을 선택할 수 있습니다.By opening the Live Share view in the Explorer or the custom tab in the VS Code activity bar, you can hover over or right-click a participant's name and select the "Remove participant" icon or option.

VS Code에서 참가자 제거

게스트 승인 필요Requiring guest approval

일반적으로 공동 작업 세션에 참여 하는 참가자는 Microsoft AAD (회사 또는 학교 계정), 개인 Microsoft 계정 또는 GitHub 계정을 사용 하 여 Live Share에 로그인 됩니다.Typically, participants that join a collaboration session will be signed into Live Share using a Microsoft work or school account (AAD), personal Microsoft account, or GitHub account. 로그인 한 사용자에 대 한 "알림 + 제거" 기본값은 이러한 게스트에 대 한 적절 한 속도와 제어를 제공 하지만 중요 한 작업을 수행 하는 경우 약간의 작업을 잠글 수 있습니다.While the "notification + remove" default for signed in users provides a good mix of speed and control for these guests, you may want to lock things down a bit more if you are doing something sensitive.

또한 특정 상황에서는 모든 게스트가 공동 작업 세션에 참여 하도록 강제 하는 것이 문제가 될 수 있습니다.In addition, in certain circumstances forcing all guests to sign in to join a collaboration session can be problematic. 예를 들어 게스트, 교실/학습 시나리오로 참여 하거나 지원 되는 계정 유형 중 하나가 없는 사람과 공동으로 작업 하는 경우 새 사용자에 게 Live Share 하도록 요청 하는 경우가 있습니다.Examples include asking someone new to Live Share to join as a guest, classroom/learning scenarios, or when collaborating with someone who does not have one of the supported account types. 이러한 이유로 Live Share을 사용 하면 로그인 하지 않은 사용자가 공동 작업 세션을 읽기 전용 게스트로 조인할 수 있습니다.For these reasons, Live Share can allow users that are not signed in to join collaboration sessions as read-only guests. 호스트는 이러한 게스트를 기본적으로 조인 하기 전에 승인 해야 하지만 이러한 "익명" 게스트를 허용 하지 않거나 대신 항상 승인 해야 할 수 있습니다.While the host needs to approve these guests before they can join by default, you may want to either disallow these "anonymous" guests or always approve them instead.

로그인 한 사용자에 대 한 게스트 승인 필요Requiring guest approval for signed in users

"승인" 할 때까지 로그인 한 게스트가 공동 작업 세션을 조인 하지 않도록 하려면 다음 설정을 변경 합니다.If you would like to prevent signed in guests from joining your collaboration sessions until you have "approved" them, change the following setting:

  • VS Code 에서 settings.js(파일 > 기본 설정 > 설정)에 다음을 추가 합니다.In VS Code, add the following to settings.json (File > Preferences > Settings):

    "liveshare.guestApprovalRequired": true
    
  • Visual Studio 에서 도구 > 옵션 > Live Share > "게스트 승인 필요"를 True로 설정 합니다.In Visual Studio, set Tools > Options > Live Share > "Require guest approval" to True.

    게스트 승인 설정이 강조 표시 된 Visual Studio 설정 창

이 시점부터 조인 하는 각 게스트를 승인 하 라는 메시지가 표시 됩니다.From this point forward, you'll be asked to approve each guest that joins.

Visual Studio Code join approval request Visual Studio join approval request

게스트로 호스트에서이 설정을 사용 하는 세션에 참여 하는 경우 호스트에서 승인 될 때까지 대기 중인 Live Share 상태 표시줄 또는 조인 대화 상자에 알림이 표시 됩니다.As a guest, if you join a session where the host has this setting enabled, you'll be notified in the status bar or join dialog that Live Share is waiting on the host to approve.

로그인 하지 않은 사용자 자동 거부 또는 수락 (익명)Auto-rejecting or accepting users that are not signed in (anonymous)

위에서 설명한 대로 Live Share 로그인 되지 않은 사용자가 공동 작업 세션을 읽기 전용 게스트로 조인 하도록 구성할 수 있습니다.As described above, Live Share can be configured to allow users that are not signed in to join a collaboration session as read-only guests. 이러한 "익명" 게스트는 가입할 때 이름을 입력 해야 하지만 단순한 이름은 실제 로그인과 동일한 수준의 보증을 제공 하지 않습니다.While these "anonymous" guests must enter a name when joining, a simple name does not provide the same level of assurance as a real sign-in. 따라서 기본적으로 호스트에는 위에서 설명한 "게스트 승인 필요" 설정에 관계 없이 익명 게스트 를 승인 하 라는 메시지가 표시 됩니다 .Therefore, by default, the host is prompted to approve any anonymous guest regardless of the "require guest approval" setting described above.

다음과 같이 항상 익명 게스트를 거부 (익명 게스트 사용 안 함) 하거나 항상 익명 사용자를 허용할 수 있습니다.You can always reject (disable anonymous guests) or always accept anonymous users instead as follows:

  • VS Code 에서 settings.js( liveshare.anonymousGuestApproval 파일 > 기본 설정 > 설정)에서 accept , reject 또는 prompt (기본값)로 설정 합니다.In VS Code, set liveshare.anonymousGuestApproval in settings.json (File > Preferences > Settings) to accept, reject, or prompt (the default) as appropriate.

  • Visual Studio 에서 도구 > 옵션 > Live Share "익명 게스트 승인"을 > 하 여 적절 하 게 수락, 거부 또는 프롬프트 (기본값)를 설정 합니다.In Visual Studio, set Tools > Options > Live Share > "Anonymous guest approval" to Accept, Reject, or Prompt (the default) as appropriate.

에 관계 없이 신뢰할 수 있는 사용자 에게만 Live Share 초대 링크를 전송 해야 합니다.Regardless, remember that you should only send Live Share invitation links to people you trust.

파일 액세스 및 표시 유형 제어Controlling file access and visibility

게스트로 서 Live Share의 원격 모델은 프로젝트의 전체 콘텐츠를 동기화 하지 않고 호스트에서 공유 하는 파일 및 폴더에 대 한 읽기/쓰기 액세스를 빠르게 제공 합니다.As a guest, Live Share's remote model gives you quick read/write access to files and folders the host has shared with you without having to sync the entire contents of a project. 따라서 전체 공유 파일 트리에서 파일을 독립적으로 탐색 하 고 편집할 수 있습니다.You can therefore independently navigate and edit files in the entire shared file tree. 그러나 이러한 자유도는 호스트에 대 한 몇 가지 위험을 야기 합니다.However, this freedom does pose some risks to the host. 개념에서 개발자는 사용자의 지식 없이 소스 코드를 사용 하 여 수정 하거나 공유 파일 트리의 어딘가에 있는 중요 한 소스 코드 또는 "비밀"을 볼 수 있습니다.In concept, a developer could opt to go in and modify source code without your knowledge or see sensitive source code or "secrets" located somewhere in the shared file tree. 따라서 호스트는 항상 공유 하는 프로젝트 전체에 대 한 액세스 권한을 게스트에 게 원하지 않을 수 있습니다.Consequently, as a host, you may not always want the guest to have access to the entirety of a project you are sharing. 다행히이 원격 모델의 이점은 기능을 저하 시 키 지 않고 다른 사용자와 공유 하지 않을 파일을 "제외" 할 수 있다는 것입니다.Thankfully, an added advantage of this remote model is that you can opt to "exclude" files you do not want to share with anyone without sacrificing on functionality. 게스트는 이러한 파일에 대 한 액세스를 자체적으로 수행 하려는 경우에도 일반적으로 이러한 파일에 액세스 해야 하는 디버깅 세션 등의 작업에 참여할 수 있습니다.Your guests can still participate in things like debugging sessions that would normally require access to these files if they wanted to do so on their own.

공유 하는 폴더 또는 프로젝트에 .vsls.js파일에 추가 하 여이를 수행할 수 있습니다.You can accomplish this by adding a .vsls.json file to the folder or project you are sharing. 이 json 형식의 파일에 추가 하는 모든 설정은 Live Share 파일을 처리 하는 방식을 변경 합니다.Any settings you add to this json formatted file changes how Live Share processes files. 직접 제어를 제공 하는 것 외에도 이러한 파일은 소스 제어에 커밋될 수 있으므로 프로젝트를 복제 하는 모든 사용자가 추가 작업을 수행할 필요 없이 이러한 규칙을 활용할 수 있습니다.In addition to providing you direct control, these files can also be committed to source control so anyone cloning a project will be able to take advantage of these rules with no additional effort on their part.

파일에 .vsls.js예제는 다음과 같습니다.Here's an example .vsls.json file:

{
    "$schema": "http://json.schemastore.org/vsls",
    "gitignore":"none",
    "excludeFiles":[
        "*.p12",
        "*.cer",
        "token",
        ".gitignore"
    ],
    "hideFiles": [
        "bin",
        "obj"
    ]
}

참고

공동 작업 세션을 시작할 때 공유 하는 모든 파일/폴더를 읽기 전용으로 설정할 수도 있습니다.You can also make the all files/folders you share read-only when you start a collaboration session. 자세한 내용은 아래 를 참조 하세요.See below for details.

이러한 속성을 통해 게스트에서 수행할 수 있는 작업을 변경 하는 방법을 살펴보겠습니다.Let's walk through how these properties change what guests can do.

속성Properties

Excludefiles 속성을 사용 하면 Live Share 게스트가 특정 파일 또는 폴더를 열 수 없도록 하는 glob 파일 패턴 (.gitignore 파일과 매우 유사)의 목록을 지정할 수 있습니다.The excludeFiles property allows you to specify a list of glob file patterns (very much like those found .gitignore files) that prevents Live Share from opening certain files or folders for guests. 이는 사용자가 편집 위치로 이동 하거나 이동 하는 것과 같은 시나리오를 포함 하 여 공동 작업 디버깅 중에 파일을 한 단계씩 실행 하 고 정의로 이동 등의 코드 탐색 기능을 제공 합니다.Be aware that this is inclusive of scenarios like a guest following or jumping to your edit location, stepping into a file during collaborative debugging, any code navigation features like go to definition, and more. 암호, 인증서 또는 암호를 포함 하는 경우와 같은 상황에서 공유 하지 않으려는 파일에 사용 됩니다.It is intended for files you never want to share under any circumstances like those containing secrets, certificates, or passwords. 예를 들어 보안을 제어 하기 때문에 파일에 대 한 .vsls.js항상 제외 됩니다.For example, since they control security, .vsls.json files are always excluded.

HideFiles 속성은 비슷하지만 엄격한 것은 아닙니다.The hideFiles property is similar, but not quite as strict. 이러한 파일은 단순히 파일 트리에서 숨겨집니다.These files are simply hidden from the file tree. 예를 들어, 디버깅 하는 동안 이러한 파일 중 하나를 한 단계씩 실행 하면 편집기에서 계속 열립니다.For example, if you happened to step into one of these files during debugging, it is still opened in the editor. 이 속성은 다른 소스 제어 시스템을 사용 하는 경우와 마찬가지로 .gitignore 파일 설정이 없거나 혼란 또는 혼동을 피하기 위해 이미 존재 하는 것을 원하는 경우에 주로 유용 합니다.This property is primarily useful if you do not have a .gitignore file setup (as would be the case if you are using a different source control system) or if you simply want to augment what is already there to avoid clutter or confusion.

.Gitignore 설정은 Live Share 공유 폴더에 있는 .gitignore 파일의 콘텐츠를 처리 하는 방법을 설정 합니다.The gitignore setting establishes how Live Share should process the contents of .gitignore files in shared folders. 기본적으로 .gitignore 파일에 있는 모든 glob는 "hideFiles" 속성에 지정 된 것 처럼 처리 됩니다.By default, any globs found in .gitignore files are treated as if they were specified in the "hideFiles" property. 그러나 다음 값 중 하나를 사용 하 여 다른 동작을 선택할 수 있습니다.However, you can choose a different behavior using one of the following values:

옵션Option 결과Result
none .gitignore 콘텐츠는 게스트 편집기 설정에 의해 필터링 되지 않는다고 가정 하 고 파일 트리의 게스트에 표시 됩니다..gitignore contents are visible to guests in the file tree (assuming they are not filtered by a guest editor setting).
hide 기본값입니다.The default. .Gitignore 내의 glob는 "hideFiles" 속성에 있는 것 처럼 처리 됩니다.Globs inside .gitignore are processed as if they were in the "hideFiles" property.
exclude .Gitignore 내의 glob는 "excludeFiles" 속성에 있는 것 처럼 처리 됩니다.Globs inside .gitignore are processed as if they were in the "excludeFiles" property.

설정의 단점은 exclude node_modules와 같은 폴더의 내용이 자주 .gitignore 하지만 디버깅 중에 한 단계씩 실행 하는 데 유용할 수 있습니다.A downside of the exclude setting is that the contents of folders like node_modules are frequently in .gitignore but can be useful to step into during debugging. 따라서 Live Share는 excludeFiles 속성에서 "!"을 사용 하 여 규칙을 되돌리는 기능을 지원 합니다.Consequently, Live Share supports the ability to reverse a rule using "!" in the excludeFiles property. 예를 들어 파일에 대 한이 .vsls.js는 node_modules를 제외 하 고 ".gitignore"에 있는 모든 항목을 제외 합니다.For example, this .vsls.json file would exclude everything in ".gitignore" except for node_modules:

{
    "$schema": "http://json.schemastore.org/vsls",
    "gitignore":"exclude",
    "excludeFiles":[
        "!node_modules"
    ]
}

숨기기 및 제외 규칙은 개별적으로 처리 되므로 실제로 제외 하지 않고 간단 하 게 node_modules 숨기려는 경우 다음과 같이 파일을 편집할 수 있습니다.The hide and exclude rules are processed separately, so if you still wanted to hide node_modules to reduce clutter without actually excluding it, you can simply edit the file as follows:

{
    "$schema": "http://json.schemastore.org/vsls",
    "gitignore":"exclude",
    "excludeFiles":[
        "!node_modules"
    ],
    "hideFiles":[
        "node_modules"
    ]
}

하위 폴더에 있는 파일에 대 한 .vsls.js.vsls.json files in sub-folders

마지막으로 .gitignore 파일에 대 한 .vsls.js를 하위 폴더에 배치할 수 있습니다.Finally, just like .gitignore, .vsls.json files can be placed in sub-folders. 숨기기/제외 규칙은 공유한 루트 폴더의 파일에 대 한 .vsls.js(있는 경우)로 시작 하 여 지정 된 파일에서 처리할 파일의 .vsls.js를 찾기 위해 각 하위 폴더를 탐색 하는 방법으로 결정 됩니다.Hide/exclude rules are determined by starting with the .vsls.json file in the root folder you have shared (if present) and then walking through at each sub-folder from there leading to a given file to look for .vsls.json files to process. 폴더의 파일에 대 한 .vsls.js내용은 파일 트리를 따라, 더 높은 수준에서 설정 된 추가 (또는 재정의) 규칙을 보완 합니다.The contents of .vsls.json files in folders farther down the file tree then supplement (or override) rules established at higher levels.

외부 파일 공유 사용 안 함Disabling external file sharing

기본적으로 Live Share는 호스트에서 여는 공유 폴더/솔루션 외부에 있는 파일도 공유 합니다.By default, Live Share will also share any files the host opens that are external to the shared folder / solution. 이렇게 하면 다시 공유 하지 않고도 관련 된 다른 파일을 쉽게 열 수 있습니다.This makes it easy to quickly open up other related files without having to re-share.

이 기능을 사용 하지 않도록 설정 하려면 다음을 수행 합니다.If you would prefer to disable this feature:

  • VS Code 에서 settings.js에 다음을 추가 합니다.In VS Code, add the following to settings.json:

    "liveshare.shareExternalFiles": false
    
  • Visual Studio 에서 도구 옵션을 > > > "외부 파일 공유" Live Share False로 설정 합니다.In Visual Studio, set Tools > Options > Live Share > "Share External Files" to False

읽기 전용 모드Read-only mode

경우에 따라 코드를 호스트로 공유 하는 경우 게스트가 편집 하지 않도록 할 수 있습니다.Sometimes when you share your code as a host, you don't want your guests to make edits. 사용자의 코드를 확인 하는 데 게스트가 필요 하거나, 많은 게스트에 게 프로젝트를 표시 하 고 불필요 하거나 실수로 편집 하지 않으려고 할 수 있습니다.You might need your guest to take a look at some of your code, or you are showing your project to a large number of guests and do not want any unnecessary or accidental edits to be made. Live Share는 읽기 전용 모드에서 프로젝트를 공유 하는 기능을 제공 합니다.Live Share offers the ability to share projects in read-only mode.

호스트로 서, 공유 하는 경우 공동 작업 세션에 대해 읽기 전용 모드를 사용 하도록 설정 하는 옵션이 있습니다.As a host, when sharing, you have the option to enable read-only mode for a collaboration session. 게스트가 조인 되 면 코드를 편집할 수 없게 됩니다. 그러나 다른 사용자의 커서 및 강조 표시는 물론 프로젝트를 탐색할 수 있습니다.When a guest joins, they will not be able to make edits to the code, though you can still see each other's cursors and highlights as well as navigate through the project.

읽기 전용 모드에서 게스트를 사용 하 여 공동 디버그할 수 있습니다.You can still co-debug with guests while in read-only mode. 게스트는 디버깅 프로세스를 단계별로 실행 하는 기능을 제공 하지 않지만 중단점을 추가 또는 제거 하 고 변수를 검사할 수 있습니다.Guests will not have the ability to step through the debugging process, but can still add or remove breakpoints, and inspect variables. 또한 게스트를 사용 하 여 서버 및 터미널 (읽기 전용)을 공유할 수 있습니다.Additionally, you can still share servers and terminals (read-only) with guests.

읽기 전용 공동 작업 세션을 시작 하는 방법에 대해 자세히 알아볼 수 있습니다.  VS Code  VSYou can learn more about starting a read-only collaboration session: VS Code VS

공동 디버깅Co-debugging

매우 간단한 코딩 문제 또는 버그를 주요 당면 디버깅할 때 눈에 더 많은 것을 포함 하는 것이 유용할 수 있습니다.When you're tackling tough coding problems or bugs, having an extra pair of eyes when debugging can be really useful. Visual Studio Live Share를 사용 하면 호스트에서 디버깅을 시작할 때마다 디버깅 세션을 모든 게스트와 공유 하 여 "공동 디버깅" 또는 "공동 디버깅"을 사용할 수 있습니다.Visual Studio Live Share enables "collaborative debugging" or "co-debugging" by sharing the debugging session with all guests whenever the host starts debugging.

호스트는 디버깅 세션이 시작 또는 중지 되는 시점을 완벽 하 게 제어 하지만 신뢰 하지 않는 사람과 공유 하는 경우 공동 디버깅으로 인해 일부 위험이 발생 합니다.As a host, you are in complete control over when a debugging session starts or stops, but co-debugging does pose some risks if you are sharing with someone you do not trust. Live Share를 사용 하 여 콘솔/REPL 명령을 실행할 수 있으므로 악의적인 행위자가 실행 하지 않으려는 명령을 실행할 위험이 있습니다.Live Share allows guests you invite to run console/REPL commands and there is therefore a risk of a malicious actor running a command you would not want them to run.

따라서 신뢰할 수 있는 사용자로만 공동 디버그할 수 있습니다.Consequently, you should only co-debug with those you trust.

자세한 정보:  VS Code  VSLearn more: VS Code VS

로컬 서버 공유Sharing a local server

공동 디버깅 시 호스트가 디버깅 세션을 위해 제공하는 애플리케이션의 서로 다른 부분을 액세스하는 것은 정말 유용할 수 있습니다.When co-debugging, it can be really useful to get access to different parts of the application being served up by the host for the debugging session. 브라우저에서 앱에 액세스 하거나 로컬 데이터베이스에 액세스 하거나 도구에서 REST 끝점을 적중 하는 것이 좋습니다.You may want to access the app in a browser, access a local database, or hit a REST endpoint from your tools. Live Share를 사용 하면 호스트 컴퓨터의 로컬 포트를 게스트 컴퓨터의 동일한 포트에 매핑하는 "서버를 공유할" 수 있습니다.Live Share lets you "share a server" which maps a local port on the host's machine to the exact same port on guest's machine. 게스트는 컴퓨터에서 로컬로 실행 하는 것 처럼 정확 하 게 응용 프로그램과 상호 작용할 수 있습니다. 예를 들어 호스트와 게스트 모두에서 실행 되는 웹 앱에 액세스할 수 있습니다. http://localhost:3000)As a guest, you can then interact with the application exactly as if it was running locally on your machine (e.g. the host and guest can both access a web app running on http://localhost:3000).

그러나 호스트는 게스트와 공유 하는 포트를 매우 선택적으로 사용 하 고 시스템 포트 대신 응용 프로그램 포트만 공유 해야 합니다.However, as a host, you should be very selective with the ports you share with guests and only share application ports rather system ports. 게스트의 경우 공유 포트는 서버/서비스를 자신의 머신에서 실행하는 것처럼 정확하게 작동합니다.For guests, shared ports will behave exactly like they would if the server/service was running on their own machine. 이 공유 포트는 매우 유용하지만 잘못된 포트를 공유하는 경우 위험할 수도 있습니다.This is very useful, but if the wrong port is shared can also be risky. 따라서 Live Share는 구성 설정이 나 호스트에서 작업을 수행 하지 않고 공유 해야 하는 항목에 대 한 가정을 하지 않습니다.For this reason, Live Share does not make any assumptions about what should or should not be shared without a configuration setting and the host performing an action.

Visual Studio에서 ASP.NET 프로젝트에 지정 된 웹 응용 프로그램 포트 는를 실행 하는 동안 웹 앱에 대 한 게스트 액세스를 용이 하 게 하기 위해 디버깅 중에 자동으로 공유 됩니다.In Visual Studio, the web application port specified in ASP.NET projects is automatically shared during debugging only to facilitate guest access to the web app when running. 그러나 선호 하는 경우 도구 > 옵션 > Live Share > 설정 하 여이 자동화를 해제할 수 있습니다.However, you can turn off this automation by setting Tools > Options > Live Share > "Share web app on debug" to "False" if you prefer.

Visual Studio Code에서 Live Share 적절 한 응용 프로그램 포트를 검색 하 고 공유 합니다.In Visual Studio Code, Live Share attempts to detect the proper application ports and share them. 그러나 settings.js에 다음을 추가 하 여이 기능을 사용 하지 않도록 설정할 수 있습니다.However, you can disable this by adding the following to settings.json:

    liveshare.autoShareServers: false

두 경우 모두 추가 포트를 공유할 때 주의를 기울여야 합니다.In either case, exercise care when sharing additional ports.

이 기능을 구성 하는 방법에 대 한 자세한 내용은 다음을 참조 하세요.  VS Code  VSYou can learn more about configuring the feature here: VS Code VS

터미널 공유Sharing a terminal

최신 개발 환경에서는 다양한 명령줄 도구를 자주 사용합니다.Modern development makes frequent use of a wide array of command line tools. 다행스럽게도 Live Share는 호스트에게 필요에 따라 게스트와 “터미널을 공유”할 수 있는 기능을 제공합니다.Fortunately, Live Share allows you as a host to optionally "share a terminal" with guests. 공유 터미널은 읽기 전용이거나 완전하게 공동 작업이 가능하므로 호스트와 게스트는 모두 명령을 실행하고 그 결과를 볼 수 있습니다.The shared terminal can be read-only or fully collaborative so both you and the guests can run commands and see the results. 호스트로 서 다른 협력자가 출력을 표시 하거나 원하는 수의 명령줄 도구를 사용 하 여 테스트, 빌드 또는 심사 환경 특정 문제를 실행 하는 것을 허용할 수 있습니다.As the host, you're able to allow other collaborators to either just see the output or to use any number of command line tools to run tests, builds, or even triage environment-specific problems.

호스트만 공유 터미널을 시작 하 여 게스트를 시작 하지 않도록 하 고 기대 하거나 시청 하지 않는 작업을 수행할 수 있습니다.Only hosts can start shared terminals to prevent guests from starting one up and doing something you are not expecting or watching. 공유 터미널을 호스트로 시작 하는 경우 읽기 전용 또는 읽기/쓰기 여야 하는지 여부를 지정할 수 있습니다.When you start a shared terminal as a host, you can specify whether it should be read-only or read/write. 터미널이 읽기/쓰기인 경우 호스트를 포함하여 누구나 터미널에 입력할 수 있습니다. 그러면 게스트가 호스트의 마음에 들지 않는 작업을 수행하는 경우 개입하기가 쉬워집니다.When the terminal is read/write, everyone can type in the terminal including the host which makes it easy to intervene if a guest is doing something you do not like. 그러나 안전하려면 호스트는 게스트가 실제로 필요하다는 것을 아는 경우 게스트에게 읽기/쓰기 액세스 권한만 부여 하고, 호스트가 실행하는 모든 명령의 출력을 게스트가 참조하기를 원하는 경우에 읽기 전용 터미널을 계속 사용해야 합니다.However, to be safe, you should only give read/write access to guests when you know they actually need it and stick with read-only terminals for scenarios where you just want the guest to see the output of any commands you run.

Visual Studio에서 터미널은 기본적으로 공유 되지 않습니다.In Visual Studio, terminals are not shared by default. VS Code에서 터미널은 기본적으로 자동으로 읽기 전용으로 공유 됩니다.In VS Code, terminals are automatically shared read-only by default. 그러나 settings.js에 다음을 추가 하 여이 기능을 사용 하지 않도록 설정할 수 있습니다.However, you can disable this by adding the following to settings.json:

"liveshare.autoShareTerminals": false

자세한 정보:  VS Code  VSLearn more: VS Code VS

Microsoft에서 지원 되는 회사 또는 학교 전자 메일 주소 를 사용 하 여 로그인 할 때 로그인 할 때 "관리자 승인 필요" 라는 메시지가 표시 될 수 있습니다.When signing in using a Microsoft backed work or school email address you may see a message saying "Need admin approval" when signing in. 이는 Live Share 보안 기능에 대 한 사용자 정보에 대 한 읽기 권한이 있어야 하며, Azure AD 테 넌 트가 디렉터리의 콘텐츠에 액세스 하는 새 응용 프로그램에 대해 "관리자 동의"를 요구 하도록 설정 되어 있기 때문입니다.This is because Live Share requires read access to user information for its security features and your Azure AD tenant is set up to require “admin consent” for new applications accessing the contents of the directory.

AD 관리자는 다음 정보를 사용 하 여이 문제를 해결 해야 합니다.Your AD admin would need to resolve this for you using the following information:

이 작업은 Live Share를 사용 하는 모든 사용자에 대해 한 번만 수행 해야 합니다.This would only need to be done once for anyone using Live Share. 자세한 내용은 여기 및 여기를 참조 하세요.See here and here for details.

추가 정보See also

문제가 있으신가요?Having problems? 문제 해결을 참조하거나 피드백을 제공해 주세요.See troubleshooting or provide feedback.