Windows еквівалент ssh - як підключитися до віддаленої машини та отримати командний рядок доступу?


19

Мені важко придумати рішення про розширення рамки, розробленої для * nix-машин, до вікон. В даний час фреймворк працює від одного * nix-сервера, а ssh - на інших * nix-серверів і виконує купу різних команд, таких як перевірка файлів журналів, синхронізація файлів з управління джерелом, повернення журналів до керування джерелом тощо. застряг у тому, як підключитися до віддалених машин Windows та отримати доступ до командного рядка. Підключення може надходити з іншої машини Windows, також не потрібно починати з Unix-машини, воно може переходити від windows до windows, а не unix до windows.

Ось приклад того, як команди виконуються в даний час в системах Unix. Щось подібне знаходиться в циклі, який проходить через список імен серверів. Мені потрібно змусити щось подібне працювати на машинах Windows.

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

Також я вважаю за краще не використовувати сторонній інструмент (мій бюджет становить близько 0 доларів). Я перевірив PsExec та ще пару людей, але, схоже, вам потрібен доступ адміністратора або потрібно передати користувачам / передати простим текстом.


За задумом, не адміністративний користувач не може нормально запускати код на віддаленій машині. Можливо, вам доведеться створити власне рішення. Чи є конкретний контекст, у якому потрібно запускати код? Чи є команди, які потрібно виконувати однакові, кожен раз?
Гаррі Джонстон

Хоча ви можете встановити MobaSSH як сервер і використовувати шпаклівку в якості клієнта або використовувати psexec для того, щоб робити все, що вам хочеться більш-менш (що нахмурилося в моєму досвіді), еквівалентна ідіома в світі Windows - не використовувати оболонку на все, але розраховувати на підтримку командного рівня для віддаленого виконання, будь то застаріла команда або оболонка повноважень у поєднанні з мережевими спільними ресурсами та картографічними накопичувачами.
Шантева

Відповіді:


14

Використовуйте видалення Powershell: https://msdn.microsoft.com/en-us/powershell/scripting/core-powershell/running-remote-commands

Безсоромно вставлено копію:

Видалення Windows PowerShell

Видалення Windows PowerShell, яке використовує протокол управління WS, дозволяє запускати будь-яку команду Windows PowerShell на одному або багатьох віддалених комп'ютерах. Це дозволяє встановлювати стійкі з'єднання, запускати інтерактивні сеанси 1: 1 та запускати сценарії на декількох комп'ютерах. Щоб використовувати Windows PowerShell для видалення, віддалений комп'ютер повинен бути налаштований для віддаленого управління. Після налаштування видалення Windows PowerShell вам доступні багато стратегій видалення. У решті цього документа перераховано лише декілька з них.

Почніть інтерактивну сесію

Щоб розпочати інтерактивний сеанс за допомогою одного віддаленого комп'ютера, використовуйте командлет Enter-PSSession. Наприклад, щоб розпочати інтерактивний сеанс із віддаленим комп'ютером Server01, введіть:

Enter-PSSession Server01

Командний рядок змінюється, щоб відобразити ім'я комп'ютера, до якого ви підключені. З цього моменту всі команди, які ви вводите під час швидкого запуску на віддаленому комп'ютері, і результати відображаються на локальному комп'ютері.

Щоб закінчити інтерактивний сеанс, введіть:

Exit-PSSession

Запустіть віддалену команду

Для запуску будь-якої команди на одному або багатьох віддалених комп'ютерах використовуйте командлет Invoke-Command. Наприклад, щоб запустити команду Get-UICulture на віддалених комп'ютерах Server01 та Server02, введіть:

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

Запустіть сценарій

Щоб запустити скрипт на одному або багатьох віддалених комп'ютерах, використовуйте параметр FilePath командлета Invoke-Command. Сценарій повинен бути увімкненим або доступним для вашого локального комп'ютера. Результати повертаються на ваш локальний комп'ютер.

Наприклад, наступна команда виконує скрипт DiskCollect.ps1 на віддалених комп'ютерах Server01 та Server02.

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

Встановіть стійкий зв’язок

Щоб запустити ряд пов’язаних команд, які обмінюються даними, створіть сеанс на віддаленому комп'ютері, а потім використовуйте командлет Invoke-Command для запуску команд у створеному вами сеансі. Для створення віддаленого сеансу використовуйте командлет New-PSSession.

Наприклад, наступна команда створює віддалений сеанс на комп'ютері Server01 та інший віддалений сеанс на комп'ютері Server02. Він зберігає об’єкти сеансу у змінній $ s.

$s = new-pssession -computername Server01, Server02

Тепер, коли сеанси встановлені, ви можете запустити в них будь-яку команду. А оскільки сеанси є стійкими, ви можете збирати дані в одній команді та використовувати їх у наступній команді.

Наприклад, наступна команда виконує команду Get-Hotfix під час сеансів у змінній $ s і зберігає результати у змінній $ h. Змінна $ h створюється для кожного з сеансів у $ s, але вона не існує в локальному сеансі.

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

Тепер ви можете використовувати дані у змінній $ h у наступних командах, таких як наступна. Результати відображаються на локальному комп'ютері.

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

5
Це рідний спосіб зробити це і має бути прийнятою відповіддю ІМХО.
Gregory Higley

SSH використовуйте порт 22 на сервері для підключення. Чи можете ви допомогти мені перевірити, чи використовується цей розчин PowerShell?
Лука

1
@Luke blogs.technet.microsoft.com/christwe/2012/06/20/… 5985-5986 за замовчуванням, але, як і більшість речей, ви можете вказати інший порт
Shanteva

4

Спробуйте тунель від Bitvise. Це ssh-клієнт. Також є ssh-сервер для підключення до машини Windows. Ці два варіанти дозволяють вам зробити дуже безпечні з'єднання разом із більш досконалими речами, такими як веб-проксі або тунелювання портів.


На жаль, SSH-сервер не є безкоштовним.
Гаррі Джонстон

4

Встановіть OpenSSH порт для Windows - це безкоштовно і забезпечує як клієнт, так і сервер.


1
Однак є проблеми із безпекою - оскільки він використовує Cygwin, він не є безпечним для багатьох користувачів. (Якщо мої дані не застаріли?)
Гаррі Джонстон

1
Microsoft працює над тим, щоб правильно перенести його до Windows. Але, здається, досить повільний прогрес: blogs.msdn.microsoft.com/powershell/2017/12/15/…
Мартін Браун

2

Ви можете спробувати psexec, який надає віддалену оболонку через службу спільного використання файлів (або, як це називається). Існує також winexe, якщо ви хочете використовувати Linux як клієнт.


1

Мені дуже подобається ідея PowerShell, хоча конфігурація може зайняти пару хвилин на сервері та клієнті.

Окрім повної відповіді Shanteva, яка пропонує використання PowerShell, вам слід також ознайомитись з Тут на веб-сайті howtogeek про те, як насправді увімкнути (і дозволити) віддалене підключення до сервера PowerShell. На серверному комп'ютері потрібна невелика конфігурація.

Дві важливі речі, які вам потрібно зробити: (Я не повинен згадувати, що ви повинні робити кожну конфігурацію "як адміністратор" правильно? Просто відкрийте PowerShell / cmd "Як адміністратор")

  • По- перше, включити службу WinRM (додаток вікна , яке обробляє віддалені команди) на СЕРВЕРУ .

На серверному комп'ютері відкрийте PowerShell і запустіть:

Enable-PSRemoting -Force

Існує також інший спосіб зробити це. Ви можете відкрити командний рядок і запустити:

winrm -quickconfig

Можна змінити конфігурації набагато більше. Зараз немає потреби.

  • По-друге, примітно, що клієнт і сервер завжди намагаються аутентифікувати один одного. Сервер хоче переконатися, що клієнт дійсно має доступ до сервера чи ні. З цією метою ви збираєтеся надати деяку інформацію автентифікації на сервер (подібно до SSH, можливо, ви надаєте ім'я користувача / пароль). І навпаки, клієнт хоче переконатися, що сервер є надійним. Можна використовувати різні схеми, такі як довіра серверу, який надає розумний публічний сертифікат, або довіра на основі IP-адреси або, можливо, просто довіряють усім !! Знову ми маємо ту саму процедуру на SSH, де сервер може надати деяку інформацію автентифікації. (Давайте просто забудемо деталі SSH зараз.)

Якщо обидва комп’ютери знаходяться на одному "домені" (група комп'ютерів, для яких всі мають різні правила та ролі), процедура здається простою (я цього не пробував).

Але, напевно, ви хочете отримати доступ до свого сервера через Інтернет (технічно називається мережею WAN), є деякі ускладнення, і вам доведеться змінити певну конфігурацію, щоб дозволити з'єднання з віддаленим сервером. На КЛІЄНТА комп'ютері включити службу WinRM. Процедура схожа на те, що ми зробили для сервера вище. Просто запустіть команду:

Enable-PSRemoting -Force

(Знову примітно! Деякі посилання говорять про те, що клієнтський комп'ютер і серверний комп'ютер повинні бути в приватних мережах, інакше все не працюватиме. Я отримую повідомлення про помилки, коли запускаю вищезгадану команду, але все працює Я не впевнений у цьому. Перевірте вищезгадану веб-сторінку.)

Потім запустіть на комп'ютері CLIENT в PowerShell:

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

Що означає, що клієнт буде довіряти всім серверам (хостам). Нарешті, запустіть це (на КЛІЄНТА я знову наголошую):

Restart-Service WinRM

Ви готові йти. Перевірте решту відповіді Шантевої. На комп'ютері CLIENT запустіть, наприклад:

Enter-PSSession -ComputerName 12.34.56.78 -Credential Administrator

Він запитає пароль, і віддалена консоль відкриється, що виглядає так:

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

Потім просто введіть команди, як і для SSH.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.