ssh와 동등한 Windows - 원격 시스템에 연결하고 명령 행에 액세스하는 방법은 무엇입니까?


18

* nix 컴퓨터 용으로 설계된 프레임 워크를 Windows로 확장하기위한 솔루션을 개발하는 데 어려움을 겪고 있습니다. 프레임 워크는 현재 하나의 * nix 서버에서 실행되고 ssh는 다른 * nix 서버에서 실행되며 로그 파일 검사, 소스 제어 파일 동기화, 로그를 소스 제어로 제출하는 것과 같은 여러 명령을 수행합니다. 에 붙어 어떻게 원격 Windows 컴퓨터에 연결하고 명령 줄에 액세스 할 수 있습니다. 연결은 또 다른 Windows 컴퓨터에서도 가능할 수 있습니다. 유닉스 시스템에서 시작하지 않아도되고, 유닉스에서 윈도우로 이동하는 대신 윈도우에서 윈도우로 이동할 수 있습니다.

다음은 현재 UNIX 시스템에서 명령이 실행되는 방법의 예입니다. 이 같은 것은 서버 이름 목록을 순환하는 루프에 있습니다. 윈도우 머신에서 돌아가는 것과 같은 것을 얻을 필요가있다.

ssh ${user}@${server} "cd /app/app_name/logs; <export source control params>; <submit logs to source control>" >> Log.txt

또한 제 3 자 도구를 사용하지 않는 편이 좋습니다 (예산은 약 $ 0). 나는 PsExec 및 몇 가지 다른 체크 아웃했습니다하지만 당신이 관리자 액세스 또는 일반 텍스트 전달 사용자가 전달해야 할 것처럼 보입니다.


설계 상 관리자가 아닌 사용자는 일반적으로 원격 시스템에서 코드를 실행할 수 없습니다. 자신 만의 솔루션을 구축해야 할 수도 있습니다. 코드가 실행되어야하는 특정 컨텍스트가 있습니까? 매번 같은 명령을 실행합니까?
Harry Johnston

MobaSSH를 서버로 설치하고 퍼티를 클라이언트로 사용하거나, psexec을 사용하여 원하는 것 (내 경험에 싫어하는 것)을 수행 할 수는 있지만 Windows 환경의 동등한 관용구는 쉘을 사용하지 않는 것입니다. 하지만 레거시 명령이든 또는 네트워크 공유 및 매핑 된 드라이브와 결합 된 PowerShell이든 원격 실행을위한 명령 수준 지원에 의존해야합니다.
Shanteva

답변:


13

Powershell Remoting 사용 : https://msdn.microsoft.com/en-us/powershell/scripting/core-powershell/running-remote-commands

뻔뻔하게 복사 붙여 넣기 :

Windows PowerShell Remoting

WS-Management 프로토콜을 사용하는 Windows PowerShell 원격 기능을 사용하면 하나 이상의 원격 컴퓨터에서 Windows PowerShell 명령을 실행할 수 있습니다. 영구 연결을 설정하고 1 : 1 대화식 세션을 시작하며 여러 컴퓨터에서 스크립트를 실행할 수 있습니다.   Windows PowerShell 원격을 사용하려면 원격 컴퓨터를 원격 관리 용으로 구성해야합니다.   Windows PowerShell 원격을 구성한 후에는 많은 원격 전략을 사용할 수 있습니다. 이 문서의 나머지 부분에는 그 중 일부만 나와 있습니다.

대화 형 세션 시작

단일 원격 컴퓨터와의 대화 형 세션을 시작하려면 Enter-PSSession cmdlet을 사용합니다. 예를 들어, Server01 원격 컴퓨터와의 대화식 세션을 시작하려면 다음과 같이 입력하십시오.

Enter-PSSession Server01

명령 프롬프트가 변경되어 연결된 컴퓨터의 이름이 표시됩니다. 그런 다음 프롬프트에서 입력하는 명령은 원격 컴퓨터에서 실행되고 결과는 로컬 컴퓨터에 표시됩니다.

대화식 세션을 종료하려면 다음을 입력하십시오.

Exit-PSSession

원격 명령 실행

하나 이상의 원격 컴퓨터에서 명령을 실행하려면 Invoke-Command cmdlet을 사용합니다. 예를 들어 Server01 및 Server02 원격 컴퓨터에서 Get-UICulture 명령을 실행하려면 다음과 같이 입력합니다.

invoke-command -computername Server01, Server02 {get-UICulture}

출력이 컴퓨터로 반환됩니다.

LCID    Name     DisplayName               PSComputerName
----    ----     -----------               --------------
1033    en-US    English (United States)   server01.corp.fabrikam.com
1033    en-US    English (United States)   server02.corp.fabrikam.com

스크립트 실행

하나 이상의 원격 컴퓨터에서 스크립트를 실행하려면 Invoke-Command cmdlet의 FilePath 매개 변수를 사용합니다. 스크립트는 로컬 컴퓨터에 있거나 액세스 할 수 있어야합니다. 결과는 로컬 컴퓨터로 반환됩니다.

예를 들어 다음 명령은 Server01 및 Server02 원격 컴퓨터에서 DiskCollect.ps1 스크립트를 실행합니다.

invoke-command -computername Server01, Server02 -filepath c:\Scripts\DiskCollect.ps1

영구 연결 설정

데이터를 공유하는 일련의 관련 명령을 실행하려면 원격 컴퓨터에서 세션을 만든 다음 Invoke-Command cmdlet을 사용하여 사용자가 만드는 세션에서 명령을 실행합니다. 원격 세션을 만들려면 New-PSSession cmdlet을 사용합니다.

예를 들어 다음 명령은 Server01 컴퓨터에 원격 세션을 만들고 Server02 컴퓨터에 다른 원격 세션을 만듭니다. 세션 객체를 $ s 변수에 저장합니다.

$s = new-pssession -computername Server01, Server02

세션이 설정되었으므로 세션에서 모든 명령을 실행할 수 있습니다. 또한 세션이 지속적이기 때문에 하나의 명령으로 데이터를 수집하고 후속 명령에서 사용할 수 있습니다.

예를 들어 다음 명령은 $ s 변수의 세션에서 Get-Hotfix 명령을 실행하고 결과를 $ h 변수에 저장합니다. $ h 변수는 $ s에있는 각 세션에서 만들어 지지만 로컬 세션에는 존재하지 않습니다.

invoke-command -session $s {$h = get-hotfix}

이제 다음 명령과 같은 후속 명령에서 $ h 변수의 데이터를 사용할 수 있습니다. 결과는 로컬 컴퓨터에 표시됩니다.

invoke-command -session $s {$h | where {$_.installedby -ne "NTAUTHORITY\SYSTEM"} }

4
이것은이를 수행 할 수있는 고유 한 방법이며 수락 된 답변 IMHO 여야합니다.
Gregory Higley

SSH를 사용하여 서버에서 포트 22를 연결하면이 PowerShell 솔루션에서 사용하는 포트를 확인할 수 있습니까?
Luke

1
@ 루크 blogs.technet.microsoft.com/christwe/2012/06/20/... 5985-5986이 기본값이지만 대부분의 경우와 마찬가지로 다른 포트를 지정할 수도 있습니다
Shanteva

4

시험 터널 어 Bitvise에서. 그것은 ssh 클라이언트입니다. 또한 SSH를 서버 Windows 컴퓨터에 연결하기위한 것입니다. 이 둘을 사용하면 웹 프록시 나 포트 터널링과 같은 고급 기능과 함께 매우 안전한 연결을 만들 수 있습니다.


불행히도 SSH 서버는 프리웨어가 아닙니다.
Harry Johnston

4

Windows 용 OpenSSH 포트 설치 - 무료이며 클라이언트와 서버를 모두 제공합니다.


1
보안 문제가 있지만 Cygwin을 사용하기 때문에 다중 사용자가 안전하지 않습니다. (내 정보가 오래되어 있지 않으면?)
Harry Johnston

1
Microsoft는 Windows에 올바르게 이식하려고 노력하고 있습니다. 그러나 그것은 아주 느린 진전 인 것 같습니다. blogs.msdn.microsoft.com/powershell/2017/12/15/...
Martin Brown

2

시도해 볼 수 있습니다. psexec 이것은 파일 공유 서비스에 대한 원격 쉘을 제공합니다 (또는 이것이 호출됩니다). 도 있습니다 포도주 잔 Linux를 클라이언트로 사용하려는 경우


1

구성이 서버와 클라이언트에서 2 ~ 3 분이 걸릴 수 있지만 PowerShell 아이디어가 정말 마음에 듭니다.

PowerShell의 사용을 제안하는 Shanteva의 완전한 대답 외에도, 이리 howtogeek 웹 사이트에서 실제로 PowerShell 서버에 원격 연결을 설정 (및 허용)하는 방법에 대해 설명합니다. 서버 컴퓨터에는 약간의 구성이 필요합니다.

당신이해야 할 중요한 두 가지 : (필자는 모든 구성을 관리자 권한으로해야한다는 언급은하지 않고 PowerShell / cmd '관리자 권한으로 열기')

  • 먼저, (원격 명령을 처리하는 Windows 응용 프로그램) WINRM 서비스를 섬기는 사람 .

서버 컴퓨터에서 PowerShell을 열고 다음을 실행합니다.

Enable-PSRemoting -Force

이렇게하는 다른 방법이 있습니다. 명령 프롬프트를 열고 다음을 실행할 수 있습니다.

winrm -quickconfig

변경할 구성이 훨씬 더 많을 수 있습니다. 지금은 필요 없습니다.

  • 둘째, 클라이언트와 서버가 항상 서로를 인증하려고 시도한다는 것은 주목할만한 사실입니다. 서버는 클라이언트가 실제로 서버에 대한 액세스를 허용했는지 여부를 확인하려고합니다. 이 경우 서버에 인증 정보를 제공 할 것입니다 (SSH와 유사하게 사용자 이름 / 비밀번호를 제공 할 수 있습니다). 반대로 클라이언트는 서버가 신뢰할 수 있는지 확인하려고합니다. 스마트 공개 인증서를 제공하는 서버를 신뢰하거나 IP 주소를 기반으로하거나 다른 사람을 신뢰하는 등의 다양한 방법을 사용할 수 있습니다! 다시 한 번 서버가 인증 정보를 제공 할 수있는 동일한 절차를 SSH에서 수행합니다. (이제 SSH 세부 정보를 잊어 버리자.)

두 컴퓨터가 모두 동일한 '도메인'(모든 규칙과 역할이 할당 된 컴퓨터 그룹)에 있으면 절차가 간단 해 보입니다 (아직 시도하지 않았습니다).

그러나 인터넷을 통해 서버에 액세스하려는 경우 (기술적으로 WAN 네트워크라고 함)에는 몇 가지 문제가 있으며 원격 서버에 연결할 수 있도록 일부 구성을 변경해야합니다. 에 고객 컴퓨터에서 WINRM 서비스를 사용하도록 설정합니다. 절차는 위의 서버에서 수행 한 절차와 비슷합니다. 다음 명령을 실행하십시오.

Enable-PSRemoting -Force

(일부 주목할만한 점은 클라이언트 컴퓨터와 서버 컴퓨터가 '사설'네트워크 상에 있어야한다는 것이거나 모든 것이 작동하지 않는다는 것입니다. 위의 명령을 실행하면 모든 오류 메시지가 나타납니다. 이 사실을 잘 모르겠습니다. 앞서 언급 한 웹 페이지를 확인하십시오.)

그런 다음 고객 PowerShell의 컴퓨터 :

Set-Item wsman:\localhost\client\trustedhosts *

즉, 클라이언트가 모든 서버 (호스트)를 신뢰합니다. 마지막으로 ( 고객 나는 다시 강조한다.)

Restart-Service WinRM

이제 갈 준비가되었습니다. 나머지 Shanteva의 대답을 확인하십시오. CLIENT 컴퓨터에서 다음과 같이 실행합니다.

Enter-PSSession -ComputerName 12.34.56.78 -Credential Administrator

암호를 묻고 원격 콘솔이 다음과 같이 열립니다.

[12.34.56.78]: PS C:\Users\Administrator\Documents>

그런 다음 SSH와 같은 명령을 입력하십시오.


-2

퍼티 또한 인기있는 Windows SSH 클라이언트입니다.


클라이언트뿐만 아니라 SSH 서버가 필요하지 않습니까?
Ajedi32

2
이것은 질문에 대답하지 않습니다. 그는 서버 - 클라이언트 조합을 찾고 있습니다.
guidod
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.