저는 소프트웨어(~30MB)의 자동 배포가 필요한 컴퓨팅 서비스를 작업 중입니다. 소프트웨어는 WCF 서비스이므로 Windows에 갇혔습니다. 구현되지 않은 클래스를 많이 사용하기 때문에 모노를 사용할 수 없습니다.
기본적으로 활성화되어 있는 SSH 및 SFTP를 통해 Linux에 배포를 쉽게 수행할 수 있습니다. 텔넷 서비스는 Windows 인스턴스에서 수동으로 시작해야 합니다. 이를 위해 RDP를 활용할 수 있는 방법이 있습니까?
Telnet을 활성화하여 AMI를 생성할 수 있습니다. 하지만, 과한 것 같습니다.
사람들은 기본 Windows 인스턴스에서 배포를 어떻게 자동화합니까? 아니면 모든 사람이 소프트웨어가 이미 설치된 상태에서 AMI를 생성합니까?
답변1
RDP는 Windows 자동화에 적합한 선택이 아닙니다.
Windows용 SSH의 대안은 WinRM - Windows 원격 관리입니다. Powershell에는 WinRM에 대한 지원이 내장되어 있습니다. EC2를 사용하는 경우(질문에 나열되지 않았지만 질문에 EC2 태그가 지정됨) Amazon 기본 Windows 이미지에서 powershell이 활성화됩니다. 보안 그룹에서 포트 5985를 열면 됩니다.
Powershell을 사용하여 연결하는 방법에 대한 지침은 다음과 같습니다.https://stackoverflow.com/questions/10237083/how-to-programmatically-remotely-execute-a-program-in-ec2-windows-instance/13284313#13284313
Windows용 SFTP의 대안은 CIFS(Windows 파일 공유)이지만 프로토콜이 암호화되지 않아 특별히 좋은 옵션은 아닙니다. Powershell 스크립트를 사용하여 파일을 전송할 수도 있습니다. 여기에서 샘플 스크립트를 참조하세요.http://poshcode.org/2216
자체 AMI를 생성해도 괜찮다면 cygwin과 해당 sshd 서버를 설치하십시오. 이렇게 하면 SSH를 통해 Windows 인스턴스로 파일을 전송하고 원격 실행할 수 있습니다.
답변2
RDP는 아마도 당신이 찾고 있는 것을 수행하는 최선의 방법은 아닐 것입니다.PowerShell 원격아마도 Linux 배포 "스토리"와 유사한 경험을 제공하는 가장 좋은 방법일 것입니다. 원격 시스템에서 대화형 셸 세션을 가져오거나 원격으로 스크립트를 실행할 수 있습니다.
Linux OS에 SFTP 서버가 포함되어 있는 데 익숙해졌기 때문에 Windows 세계에서의 파일 전송은 약간의 해킹처럼 느껴질 것입니다.
인터넷을 통해 직접 SMB 파일 공유 프로토콜을 실행할 수 있지만 이는 일반적으로 약간의 보안 위험으로 간주됩니다.
RDP 프로토콜에는 파일 전송 기능이 내장되어 있지만 일괄/비대화형 방식으로 RDP 클라이언트를 사용하는 것은 위험한 해킹이 될 것입니다(RDP의 파일 전송 메커니즘 자체가 약간 멍청한 해킹).
Powershell 자체는원격 서버에서 파일 다운로드와 비슷한 방식으로 wget
. 저는 작업 시 원격 Windows 서버에 코드 배포를 수행하지 않지만, 내장된 기능만 사용하기 때문에 이 방법을 사용하여 코드를 원격 서버로 "풀"하는 것을 강력히 검토하고 싶습니다.
답변3
인프라와 WCF 서비스 배포를 자동화하려고 하는지 확실하지 않습니다.
코드 배포
Windows에는 몇 가지 방법이 있지만 마법의 답은 없습니다. 그리고 아키텍처는 Linux와 다르지 않습니다. 사용하는 도구와 Windows에서 기본적으로 사용할 수 있는 도구에 차이가 있습니다.
1) SSH, SFTP, Telenet 등 중 하나를 설치한 다음 배치 또는 Powershell과 함께 Linux에서 지금과 유사한 방법을 사용합니다. Evan Anderson이 말했듯이 Linux에서 사용할 수 있는 도구 때문에 이것이 이상하게 느껴질 수도 있습니다.
Java로 작업한 경우 일반 프로세스는 동일합니다. 즉, 배포하기 전에 코드를 빌드해야 하며 배치 스크립트 또는 Powershell을 사용하여 모두 자동화할 수 있습니다.
2) 더 확장 가능한 방법은 Octopus와 같은 자동화된 배포 서버(배포 대상에 설치된 에이전트)를 사용하고 선택적으로 Jenkins 또는 Bamboo와 같은 빌드 서버를 사용하는 것입니다. Git과 같은 코드 저장소에 있는 코드와 함께 지속적인 통합 및 배포를 수행하거나 git 저장소의 특정 분기를 기반으로 수동 자동화를 수행할 수 있습니다.
다시 말하지만 일반적인 프로세스는 Linux의 Java 또는 다른 언어와 동일합니다.