Setara dengan Windows ssh - bagaimana menghubungkan ke mesin jarak jauh dan mengakses baris perintah?

19

Saya mengalami kesulitan menemukan solusi untuk memperluas kerangka kerja yang dirancang untuk mesin * nix ke windows. Kerangka kerja saat ini berjalan dari satu server * nix dan ssh keluar ke server * nix lainnya dan melakukan banyak perintah yang berbeda seperti memeriksa file log, menyinkronkan file dari kontrol sumber, mengirimkan log kembali ke kontrol sumber, dll. macet pada bagaimana menghubungkan ke mesin windows remote dan mengakses baris perintah. Sambungan dapat berasal dari mesin Windows lain juga, itu tidak harus mulai dari mesin unix, itu bisa pergi dari windows ke windows bukannya unix ke windows.

Berikut adalah contoh bagaimana perintah saat ini dijalankan pada sistem unix. Sesuatu seperti ini ada dalam satu loop yang melewati daftar nama server. Saya perlu mendapatkan sesuatu seperti ini untuk berjalan di mesin windows.

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

Juga, saya lebih suka untuk tidak menggunakan alat pihak ke-3 (anggaran saya adalah sekitar $ 0). Saya telah memeriksa PsExec dan beberapa lainnya tetapi sepertinya Anda memerlukan akses admin atau harus lulus pengguna / lulus dalam teks biasa.


sumber
Secara desain, pengguna non-administratif biasanya tidak dapat menjalankan kode pada mesin jarak jauh. Anda mungkin harus membangun solusi sendiri. Apakah ada konteks khusus yang harus dijalankan oleh kode? Apakah perintah yang harus dijalankan sama setiap saat?
Harry Johnston
Meskipun Anda dapat menginstal MobaSSH sebagai server dan menggunakan dempul sebagai klien, atau menggunakan psexec untuk melakukan apa pun yang Anda inginkan kurang lebih (yang disukai dalam pengalaman saya), idiom setara di dunia Windows adalah tidak menggunakan shell di semua, kecuali mengandalkan dukungan tingkat perintah untuk eksekusi jarak jauh apakah itu perintah warisan atau PowerShell yang dikombinasikan dengan berbagi jaringan dan drive yang dipetakan.
Shanteva

Jawaban:

14

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

Copy-paste tanpa malu-malu:

Remoting PowerShell Windows

Remoting Windows PowerShell, yang menggunakan protokol WS-Management, memungkinkan Anda menjalankan perintah Windows PowerShell pada satu atau banyak komputer jarak jauh. Ini memungkinkan Anda membuat koneksi terus-menerus, memulai sesi interaktif 1: 1, dan menjalankan skrip pada banyak komputer. Untuk menggunakan remoting Windows PowerShell, komputer jarak jauh harus dikonfigurasi untuk manajemen jarak jauh. Setelah Anda mengkonfigurasi Windows PowerShell remoting, banyak strategi remoting tersedia untuk Anda. Sisa dari dokumen ini daftar hanya beberapa dari mereka.

Mulai Sesi Interaktif

Untuk memulai sesi interaktif dengan komputer jarak jauh tunggal, gunakan cmdlet Enter-PSSession. Misalnya, untuk memulai sesi interaktif dengan komputer jarak jauh Server01, ketik:

Enter-PSSession Server01

Prompt perintah berubah untuk menampilkan nama komputer yang terhubung dengan Anda. Sejak saat itu, semua perintah yang Anda ketikkan pada prompt dijalankan di komputer jarak jauh dan hasilnya ditampilkan di komputer lokal.

Untuk mengakhiri sesi interaktif, ketik:

Exit-PSSession

Jalankan Perintah Jarak Jauh

Untuk menjalankan perintah apa pun di satu atau banyak komputer jarak jauh, gunakan cmdlet Invoke-Command. Misalnya, untuk menjalankan perintah Get-UICulture pada komputer jarak jauh Server01 dan Server02, ketik:

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

Output dikembalikan ke komputer Anda.

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

Jalankan Script

Untuk menjalankan skrip di satu atau banyak komputer jarak jauh, gunakan parameter FilePath pada cmdlet Invoke-Command. Skrip harus aktif atau dapat diakses oleh komputer lokal Anda. Hasilnya dikembalikan ke komputer lokal Anda.

Misalnya, perintah berikut menjalankan skrip DiskCollect.ps1 pada komputer jarak jauh Server01 dan Server02.

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

Membangun Koneksi Persisten

Untuk menjalankan serangkaian perintah terkait yang berbagi data, buat sesi di komputer jarak jauh dan kemudian gunakan cmdlet Invoke-Command untuk menjalankan perintah di sesi yang Anda buat. Untuk membuat sesi jarak jauh, gunakan cmdlet New-PSSession.

Misalnya, perintah berikut ini membuat sesi jarak jauh di komputer Server01 dan sesi jarak jauh lainnya di komputer Server02. Ini menyimpan objek sesi dalam variabel $ s.

$s = new-pssession -computername Server01, Server02

Sekarang setelah sesi dibuat, Anda dapat menjalankan perintah apa pun di dalamnya. Dan karena sesi ini persisten, Anda dapat mengumpulkan data dalam satu perintah dan menggunakannya dalam perintah berikutnya.

Misalnya, perintah berikut menjalankan perintah Get-Hotfix di sesi dalam variabel $ s dan menyimpan hasilnya dalam variabel $ h. Variabel $ h dibuat di setiap sesi dalam $ s, tetapi itu tidak ada di sesi lokal.

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

Sekarang Anda dapat menggunakan data dalam variabel $ h dalam perintah berikutnya, seperti yang berikut. Hasilnya ditampilkan di komputer lokal.

invoke-command -session $s {$h | where {$_.installedby -ne "NTAUTHORITY\SYSTEM"} }
Shanteva
sumber
5
Ini adalah cara asli untuk melakukannya dan harus menjadi jawaban IMHO yang diterima.
Gregory Higley
SSH menggunakan port 22 pada server untuk terhubung, Bisakah Anda membantu saya memeriksa port yang menggunakan solusi PowerShell ini?
Lukas
1
@ Lukas blogs.technet.microsoft.com/christwe/2012/06/20/ ... 5985-5986 adalah defaultnya, tetapi seperti kebanyakan hal, Anda dapat menentukan port lain
Shanteva
4

Coba tunnellier dari Bitvise. Itu adalah klien ssh. Ada juga server ssh untuk menghubungkan ke mesin windows. Keduanya memungkinkan Anda untuk membuat koneksi yang sangat aman bersama dengan hal-hal yang lebih maju seperti proxy web atau tunneling port.


sumber
Sayangnya server SSH tidak freeware.
Harry Johnston
4

Instal port OpenSSH untuk Windows - gratis dan menyediakan klien dan server.

Callback Eugene Mayevski
sumber
1
Ada masalah keamanan, karena - karena menggunakan Cygwin, ini tidak aman bagi banyak pengguna. (Kecuali informasi saya kedaluwarsa?)
Harry Johnston
1
Microsoft sedang mengerjakan porting dengan benar ke windows. Tetapi tampaknya ini adalah kemajuan yang cukup lambat: blogs.msdn.microsoft.com/powershell/2017/12/15/…
Martin Brown
2

Kamu bisa mencoba psexec yang memberi Anda shell jarak jauh atas layanan berbagi file (atau bagaimanapun disebut). Ada juga winexe jika Anda ingin menggunakan Linux sebagai klien.

Julian
sumber
1

Saya sangat menyukai ide PowerShell, meskipun konfigurasi mungkin memerlukan beberapa menit di server dan klien.

Selain jawaban lengkap dari Shanteva, yang menyarankan penggunaan PowerShell, Anda juga harus melihat di sini di situs web howtogeek tentang cara mengaktifkan (dan memungkinkan) koneksi jarak jauh ke server PowerShell. Ada sedikit konfigurasi yang diperlukan pada komputer server.

Dua hal penting yang perlu Anda lakukan: (Saya tidak perlu menyebutkan bahwa Anda harus melakukan setiap konfigurasi 'sebagai administrator' kan? Cukup buka PowerShell / cmd 'Sebagai administrator')

  • Pertama, aktifkan layanan WINRM (aplikasi windows yang memproses perintah jarak jauh) pada SERVER .

Di komputer server, buka PowerShell dan jalankan:

Enable-PSRemoting -Force

Ada juga cara lain untuk melakukan ini. Anda dapat membuka prompt perintah dan menjalankan:

winrm -quickconfig

Mungkin ada lebih banyak konfigurasi untuk diubah. Tidak perlu untuk saat ini.

  • Kedua, perlu dicatat bahwa klien dan server selalu berusaha untuk saling mengotentikasi. Server ingin memastikan klien benar-benar memiliki akses ke server atau tidak. Demi kepentingan ini, Anda akan memberikan beberapa informasi otentikasi ke server (mirip dengan SSH, Anda mungkin memberikan Nama Pengguna / Kata Sandi). Sebaliknya, klien ingin memastikan bahwa server adalah yang tepercaya. Skema yang berbeda dapat digunakan, seperti mempercayai server yang menyediakan sertifikat publik cerdas atau percaya berdasarkan alamat IP atau mungkin hanya mempercayai semua orang !! Sekali lagi kami memiliki prosedur yang sama pada SSH di mana server dapat memberikan beberapa informasi otentikasi. (Mari kita lupakan detail SSH untuk saat ini.)

Jika kedua komputer berada pada 'domain' yang sama (sekelompok komputer yang setiap orangnya memiliki aturan dan peran berbeda), prosedurnya tampaknya sederhana (saya belum mencobanya).

TETAPI, karena Anda mungkin ingin mengakses server Anda melalui Internet (secara teknis disebut jaringan WAN), ada beberapa komplikasi dan Anda harus mengubah beberapa konfigurasi untuk memungkinkan koneksi ke server jauh. Pada komputer KLIEN mengaktifkan layanan WINRM. Prosedurnya mirip dengan apa yang telah kami lakukan untuk server di atas. Jalankan saja perintah:

Enable-PSRemoting -Force

(Lagi-lagi perlu diperhatikan! Beberapa referensi mengatakan bahwa komputer klien dan komputer server harus ada di jaringan 'Pribadi', atau semuanya tidak akan berfungsi. Saya mendapatkan pesan kesalahan untuk ini ketika saya menjalankan perintah di atas tetapi semuanya berfungsi menemukan Saya tidak yakin dengan fakta ini. Periksa halaman web yang disebutkan sebelumnya.)

Kemudian jalankan di komputer CLIENT di PowerShell:

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

Yang berarti bahwa klien akan mempercayai semua server (host). Akhirnya, jalankan ini (pada CLIENT lagi saya tekankan):

Restart-Service WinRM

Kamu siap untuk pergi. Periksa sisa jawaban Shanteva. Di komputer KLIEN, jalankan misalnya:

Enter-PSSession -ComputerName 12.34.56.78 -Credential Administrator

Ini akan meminta kata sandi dan konsol jarak jauh terbuka yang terlihat seperti:

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

Kemudian cukup masukkan perintah seperti yang Anda lakukan untuk SSH.

Ali Nakisaee
sumber