Câu hỏi Windows-to-Linux: Thực thi một kịch bản lệnh shell là quá trình người dùng (như bkgrnd) trên các máy từ xa


Tôi đang cố gắng làm như sau:

1) Chạy tập lệnh shell trên máy từ xa 1,2 và 3 (tất cả Linux) từ máy Windows.

2) Trên máy tính Windows của tôi, tôi có plink mà tôi đang sử dụng theo cách sau:

plink -i <my_private_key> user@machineX.com -t "bash <script_loc> args &"

Khi tôi làm điều đó, quá trình dự kiến ​​sẽ không bắt đầu. Tôi xác nhận rằng bằng cách đăng nhập từ xa vào machineX (1,2, or3) và gõ:

ps -A -F | grep -i "whatever" 

Tôi có thể bắt đầu nó trên một dòng lệnh bằng cách gõ:

cmd /c start plink -i <my_private_key> user@machineX.com -t ""bash <script_loc> args ""&""""

nhưng điều đó có nghĩa là nó sẽ mở một thiết bị đầu cuối mới và sau khi đăng xuất khỏi máy Windows, chúng sẽ bị chấm dứt.

Mục tiêu của tôi là bắt đầu từ xa các tập lệnh này và giữ cho chúng chạy dưới dạng các quy trình nền hoặc trình nền. Tôi sẽ có thể tìm thấy pid vv kể từ khi tôi biết những gì họ sẽ được chạy thông qua dòng lệnh.

Điều này có thể thực hiện được mà không cần tạo dịch vụ không?

Trân trọng,


1
2017-07-10 16:57


gốc




Các câu trả lời:


Nếu bạn đang chạy plink, sau đó bạn không sử dụng PS remoting để làm điều này, vì bạn chỉ đang chạy lệnh plink một trong các host PS (console / ISE / VSCode). Đây không phải là một vấn đề PS, nhưng làm thế nào để chạy và exe trong PS. Tôi làm plink để Linux hộp hàng ngày mà không có vấn đề, nhưng như bạn đã lưu ý trong lệnh thứ hai của bạn và bắt đầu vấn đề lệnh.

Nếu bạn đang ở trong một trong các bảng điều khiển PS, bạn phải cung cấp một lệnh thực hiện, và cho exe bên ngoài, bạn sẽ nhận được vào thói quen đủ điều kiện exe.

Ví dụ, ở đây nó là cách tôi làm điều này thành công cho tất cả các hộp Linux của tôi. Điều đó & (dấu và) có nghĩa là - Thực hiện chuỗi dưới dạng lệnh. Về cơ bản điều tương tự bạn đang làm bằng cách gọi bắt đầu cmd.exe, nhưng không có cửa sổ đầu cuối bổ sung.

# Using PowerShell and Plink for Linux remote management
# Example
$PlinkPath = 'D:\Tools\plink.exe'

$linuxhostname = 'SomeLinuxHostName'
$linuxusername = 'SomeLinuxUserName'
$LinuxSessionName = 'LinuxSessionNameName' # Putty Saved session name

$GetIptablesNat = & $PlinkPath -load $LinuxSessionName 'sudo -s iptables -L -nv --line-numbers -t nat';$GetIptablesNat 
$GetIptablesFilter = & $PlinkPath -load $LinuxSessionName 'sudo -s iptables -L -nv --line-numbers -t filter';$GetIptablesFilter
$RestartIptablesService = & $PlinkPath -load $LinuxSessionName 'sudo -s service iptables restart';$RestartIptablesService

# Network statistics
$GetNetworkStatistics = & $PlinkPath -load $LinuxSessionName 'sudo -s netstat -tN';$GetNetworkStatistics

# Connectivity check
(
'SomeLinuxHostFQDN','SomeLinuxIPA'
) | % { Test-Connection -ComputerName $_ }


# From Linux NAT Gateway
$TestConnectivity = & $PlinkPath -load $LinuxSessionName 'sudo -s ping SomeHostIPA';$TestConnectivity

Nếu bạn muốn các công cụ chạy trong nền, đó là công việc của PS.

Xem bài viết này:

https://codingbee.net/tutorials/powershell/powershell-running-tasks-in-the-background

Xem thêm thông tin về tệp trợ giúp PS liên quan đến các quy trình và Runspaces song song.

Get-Help -Name about_Jobs
Get-Help -Name about_Parallel
Get-Help -Name about_PSSessions
Get-Help -Name about_PSSession_Details
Get-Help -Name about_Workflows
Get-Help -Name about_WorkflowCommonParameter

Bắt đầu sử dụng PowerShell Runspaces

https://blogs.technet.microsoft.com/heyscriptingguy/2015/11/26/beginning-use-of-powershell-runspaces-part-1

Tuy nhiên tôi đã không thử với Plink.

Nhưng có rất nhiều bài viết liên quan đến các trường hợp sử dụng PS và Plink, ngay cả đối với các thiết bị chuyển mạch của Cisco.

Thủ thuật SSH PowerShell với plink.exe

http://www.virtu-al.net/2013/01/07/ssh-powershell-tricks-with-plink-exe

Mô-đun PowerShell mẫu để quản lý các máy chủ Linux đã bật SSH sử dụng   SMA

Đây là một mô-đun Windows PowerShell mẫu để quản lý SSH cho phép Linux   máy chủ. Nó kết thúc tốt đẹp công cụ Putty Plink.exe để thực hiện các lệnh SSH.

https://gallery.technet.microsoft.com/scriptcenter/Sample-PowerShell-module-8d961a1c

Và điểm đáng chú ý là PS có một mô-đun SSH, vì vậy, bạn không phải sử dụng Plink đặc biệt để tương tác với các máy khách Linux.

Sử dụng SSH với PowerShell

https://www.thomasmaurer.ch/2016/04/using-ssh-with-powershell 

Posh-SSH 2.0.2

Cung cấp chức năng SSH và SCP để thực thi các lệnh chống lại   máy chủ từ xa.

https://www.powershellgallery.com/packages/Posh-SSH/2.0.2


1
2017-07-10 21:52



Cảm ơn. Tôi đang cố gắng để xem liệu làm cho một đơn vị systemd ra khỏi đó giúp mọi thứ ... Nhưng có vẻ như solutuon của bạn chỉ là đi để làm việc nếu máy tính của tôi là blackboxed. - hagubear


Bạn chỉ cần một kịch bản từ xa mà forks và viết một tập tin PID.

Có rất nhiều cách để làm điều này.

Những gì khách hàng bạn sử dụng (plink, putty, ssh, hoặc những gì bao giờ) sẽ không quan trọng.

Miễn là:

  1. Bạn có quyền chạy tập lệnh.
  2. Khả năng chạy kịch bản.
  3. Quyền cho mọi thứ trong tập lệnh.

Tôi chưa thử cái này chính xác, nhưng đây là một ví dụ mà tôi đã tìm thấy trong một phiên Google dài 0,5 phút.


0
2017-07-12 17:55