Windows tương đương với ssh - làm thế nào để kết nối với máy từ xa và truy cập dòng lệnh?


18

Tôi đang gặp khó khăn khi đưa ra giải pháp mở rộng khung được thiết kế cho các máy * nix qua cửa sổ. Khung hiện đang chạy từ một máy chủ * nix và ssh ra các máy chủ * nix khác và thực hiện một loạt các lệnh khác nhau như kiểm tra tệp nhật ký, đồng bộ hóa tệp từ kiểm soát nguồn, gửi nhật ký trở lại kiểm soát nguồn, v.v. bị mắc kẹt là làm thế nào để kết nối với các máy windows từ xa và truy cập dòng lệnh. Kết nối cũng có thể đến từ một máy Windows khác, nó không phải bắt đầu từ một máy unix, nó có thể đi từ windows sang windows thay vì unix sang windows.

Đây là một ví dụ về cách các lệnh hiện đang được chạy trên các hệ thống unix. Một cái gì đó như thế này là trong một vòng lặp đi qua một danh sách các tên máy chủ. Tôi cần phải có một cái gì đó như thế này để chạy trên các máy Windows.

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

Ngoài ra, tôi không muốn sử dụng công cụ của bên thứ 3 (ngân sách của tôi khoảng $ 0). Tôi đã kiểm tra PsExec và một vài người khác nhưng có vẻ như bạn cần quyền truy cập của quản trị viên hoặc phải chuyển người dùng / vượt qua bằng văn bản thuần túy.


Theo thiết kế, người dùng không phải quản trị viên thường không thể chạy mã trên máy từ xa. Bạn có thể phải xây dựng giải pháp của riêng bạn. Có một bối cảnh cụ thể mà mã cần phải chạy trong? Các lệnh có được chạy giống nhau mỗi lần không?
Harry Johnston

Mặc dù bạn có thể cài đặt MobaSSH làm máy chủ và sử dụng putty làm máy khách hoặc sử dụng psexec để làm bất cứ điều gì bạn muốn ít nhiều (theo kinh nghiệm của tôi), thành ngữ tương đương trong thế giới Windows không sử dụng shell tất cả, nhưng để dựa vào hỗ trợ cấp lệnh để thực hiện từ xa cho dù đó là lệnh kế thừa hay quyền hạn kết hợp với chia sẻ mạng và ổ đĩa được ánh xạ.
Chaieva

Câu trả lời:


14

Sử dụng từ xa Powershell: https://msdn.microsoft.com/en-us/powershell/scripting/core-powershell/rasty-remote-commands

Sao chép không biết xấu hổ dán:

Windows PowerShell từ xa

Điều khiển từ xa Windows PowerShell, sử dụng giao thức WS-Management, cho phép bạn chạy bất kỳ lệnh Windows PowerShell nào trên một hoặc nhiều máy tính từ xa. Nó cho phép bạn thiết lập các kết nối liên tục, bắt đầu các phiên tương tác 1: 1 và chạy các tập lệnh trên nhiều máy tính. Để sử dụng điều khiển từ xa Windows PowerShell, máy tính từ xa phải được cấu hình để quản lý từ xa. Sau khi bạn đã định cấu hình từ xa Windows PowerShell, nhiều chiến lược từ xa có sẵn cho bạn. Phần còn lại của tài liệu này chỉ liệt kê một vài trong số họ.

Bắt đầu một phiên tương tác

Để bắt đầu phiên tương tác với một máy tính từ xa, hãy sử dụng lệnh ghép ngắn Enter-PSSession. Ví dụ: để bắt đầu phiên tương tác với máy tính từ xa Server01, hãy nhập:

Enter-PSSession Server01

Dấu nhắc lệnh thay đổi để hiển thị tên của máy tính mà bạn được kết nối. Từ đó trở đi, bất kỳ lệnh nào bạn gõ tại dấu nhắc chạy trên máy tính từ xa và kết quả được hiển thị trên máy tính cục bộ.

Để kết thúc phiên tương tác, nhập:

Exit-PSSession

Chạy một lệnh từ xa

Để chạy bất kỳ lệnh nào trên một hoặc nhiều máy tính từ xa, hãy sử dụng lệnh ghép ngắn Invoke-Command. Ví dụ: để chạy lệnh Get-UICARM trên máy tính từ xa Server01 và Server02, hãy nhập:

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

Đầu ra được trả về máy tính của bạn.

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

Chạy một kịch bản

Để chạy tập lệnh trên một hoặc nhiều máy tính từ xa, hãy sử dụng tham số FilePath của lệnh ghép ngắn Invoke-Command. Kịch bản phải được bật hoặc truy cập vào máy tính cục bộ của bạn. Kết quả được trả về máy tính cục bộ của bạn.

Ví dụ: lệnh sau chạy tập lệnh DiskCollect.ps1 trên máy tính từ xa Server01 và Server02.

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

Thiết lập kết nối liên tục

Để chạy một loạt các lệnh liên quan chia sẻ dữ liệu, hãy tạo một phiên trên máy tính từ xa và sau đó sử dụng lệnh ghép ngắn Invoke-Command để chạy các lệnh trong phiên mà bạn tạo. Để tạo một phiên từ xa, hãy sử dụng lệnh ghép ngắn New-PSSession.

Ví dụ: lệnh sau tạo một phiên từ xa trên máy tính Server01 và một phiên từ xa khác trên máy tính Server02. Nó lưu các đối tượng phiên trong biến $ s.

$s = new-pssession -computername Server01, Server02

Bây giờ các phiên được thiết lập, bạn có thể chạy bất kỳ lệnh nào trong chúng. Và bởi vì các phiên là liên tục, bạn có thể thu thập dữ liệu trong một lệnh và sử dụng nó trong một lệnh tiếp theo.

Ví dụ: lệnh sau chạy lệnh Get-Hotfix trong các phiên trong biến $ s và nó lưu kết quả trong biến $ h. Biến $ h được tạo trong mỗi phiên trong $ s, nhưng nó không tồn tại trong phiên cục bộ.

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

Bây giờ bạn có thể sử dụng dữ liệu trong biến $ h trong các lệnh tiếp theo, chẳng hạn như lệnh sau. Kết quả được hiển thị trên máy tính cục bộ.

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

5
Đây là cách bản địa để làm điều đó và nên là câu trả lời được chấp nhận IMHO.
Gregory Higley

SSH sử dụng cổng 22 trên máy chủ để kết nối, Bạn có thể vui lòng giúp tôi kiểm tra cổng sử dụng giải pháp PowerShell này không?
Lu-ca

1
@Luke blogs.technet.microsoft.com/christwe/2012/06/20/... 5985-5986 là giá trị mặc định, nhưng cũng giống như hầu hết mọi thứ, bạn có thể chỉ định một cổng
Shanteva

4

Hãy thử điều chỉnh từ Bitvise. Đó là một khách hàng ssh. Ngoài ra còn có một máy chủ ssh để kết nối với máy windows. Cả hai cho phép bạn thực hiện các kết nối rất an toàn cùng với những thứ cao cấp hơn như proxy web hoặc đường hầm cổng.


Thật không may, máy chủ SSH không phải là phần mềm miễn phí.
Harry Johnston

4

Cài đặt cổng OpenSSH cho Windows - miễn phí và cung cấp cả máy khách và máy chủ.


1
Tuy nhiên, có một số vấn đề bảo mật - vì nó sử dụng Cygwin, nên nó không an toàn cho nhiều người dùng. (Trừ khi thông tin của tôi đã hết hạn?)
Harry Johnston

1
Microsoft đang làm việc để chuyển nó đúng cách sang windows. Nhưng có vẻ như tiến độ khá chậm: blog.msdn.microsoft.com/powershell/2017/12/15/iêu
Martin Brown

2

Bạn có thể thử psexec cung cấp cho bạn một vỏ từ xa trên dịch vụ chia sẻ tệp (hoặc tuy nhiên điều này được gọi là). Ngoài ra còn có Winexe nếu bạn muốn sử dụng Linux làm máy khách.


1

Tôi thực sự thích ý tưởng về PowerShell, mặc dù cấu hình có thể mất vài phút trên máy chủ và máy khách.

Bên cạnh câu trả lời đầy đủ của Chaieva, gợi ý sử dụng PowerShell, bạn cũng nên xem tại đây trên trang web howtogeek về cách thực sự Kích hoạt (và Cho phép) kết nối từ xa đến máy chủ PowerShell. Có một chút cấu hình cần thiết trên máy tính của máy chủ.

Hai điều quan trọng bạn cần làm: (Tôi không phải đề cập rằng bạn phải thực hiện mọi cấu hình 'với tư cách quản trị viên' phải không? Chỉ cần mở PowerShell / cmd 'Là quản trị viên')

  • Đầu tiên, kích hoạt dịch vụ WINRM (ứng dụng windows xử lý các lệnh từ xa) trên SERVER .

Trên máy tính, mở PowerShell và chạy:

Enable-PSRemoting -Force

Cũng có cách khác để làm điều này. Bạn có thể mở một dấu nhắc lệnh và chạy:

winrm -quickconfig

Có thể có nhiều cấu hình hơn để thay đổi. Không cần bây giờ.

  • Thứ hai, đáng chú ý là máy khách và máy chủ luôn cố gắng xác thực lẫn nhau. Máy chủ muốn đảm bảo rằng máy khách có thực sự có cho phép truy cập vào máy chủ hay không. Vì lý do này, bạn sẽ cung cấp một số thông tin xác thực cho máy chủ (tương tự như SSH, bạn có thể cung cấp Tên người dùng / Mật khẩu). Ngược lại, khách hàng muốn đảm bảo rằng máy chủ là một máy chủ đáng tin cậy. Các chương trình khác nhau có thể được sử dụng, chẳng hạn như tin tưởng một máy chủ cung cấp chứng chỉ công cộng thông minh hoặc tin tưởng dựa trên địa chỉ IP hoặc có thể chỉ tin tưởng tất cả mọi người !! Một lần nữa chúng ta có quy trình tương tự trên SSH nơi máy chủ có thể cung cấp một số thông tin xác thực. (Bây giờ chúng ta hãy quên các chi tiết SSH.)

Nếu cả hai máy tính nằm trên cùng một 'miền' (một nhóm máy tính mà mọi người đều có các quy tắc và vai trò khác nhau được gán), quy trình có vẻ đơn giản (tôi đã không thử điều đó).

NHƯNG, vì bạn có thể muốn truy cập máy chủ của mình thông qua Internet (về mặt kỹ thuật được gọi là mạng WAN), có một số phức tạp và bạn phải thay đổi một số cấu hình để cho phép kết nối với máy chủ từ xa. Trên máy tính CLIENT kích hoạt dịch vụ WINRM. Quy trình tương tự như những gì chúng tôi đã làm cho máy chủ ở trên. Chỉ cần chạy lệnh:

Enable-PSRemoting -Force

. . Tôi không chắc về sự thật này. Hãy kiểm tra trang web nói trên.)

Sau đó chạy trên máy tính CLIENT trong PowerShell:

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

Điều đó có nghĩa là khách hàng sẽ tin tưởng tất cả các máy chủ (máy chủ). Cuối cùng, chạy cái này (trên CLIENT một lần nữa tôi nhấn mạnh):

Restart-Service WinRM

Bạn đã sẵn sàng để đi. Kiểm tra phần còn lại của câu trả lời của Chaieva. Trên máy tính CLIENT, chạy ví dụ:

Enter-PSSession -ComputerName 12.34.56.78 -Credential Administrator

Nó sẽ hỏi mật khẩu và bảng điều khiển từ xa mở ra trông như sau:

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

Sau đó, chỉ cần nhập các lệnh như bạn làm cho SSH.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.