Windows

有人用 Ansible 和 Windows 客戶端解決了雙跳問題嗎?

  • December 30, 2019

我的情況:我有一個 Ansible 伺服器、一個 Tower 伺服器、一個 Windows 文件伺服器和一個 Windows 客戶端。通過 Ansible,我想告訴 Windows 客戶端從 Windows 文件伺服器複製一些文件。在找不到允許我將文件從遠端主機複製到客戶端電腦的劇本模組後,我決定嘗試一系列不同的 Powershell 腳本和 cmdlet 來執行簡單的文件複製。

我似乎遇到了雙跳問題,因為 Ansible / Linux 伺服器是這種情況下的原始機器——我無法控制那台機器——我想知道是否有人解決了這個問題並設法獲取腳本通過雙跳。或者,如果有人知道可以將文件從遠端主機複製到客戶端主機的 Ansible 模組,那也會很有趣。如果我需要送出一張票讓 Ansible 所有者做某事,或者我需要做某事,或者我應該放棄,無論如何,感謝您的時間!

雖然這絕對是一個 hack,而且我相信您已經從這個問題中繼續前進,但一種解決方法是創建一個計劃任務(使用 Windows schtasks命令)並立即執行它以執行複制。計劃任務將在適當的上下文中執行,並且能夠從伺服器複製而不會遇到雙跳問題,因為它源自客戶端電腦。我確信這個問題有一個實際的 Ansible 級別的解決方案,但這是我目前的解決方法。

您的更高級別的腳本可以使用 psutil 或類似的東西來監控任務,並且在計劃任務完成之前不會返回。

這是我用 Python 編寫的幫助腳本,用於完成此任務:

# run_as_scheduled_task.py
import psutil
import subprocess
import time
import sys

to_match = sys.argv[1]
to_run = ' '.join(sys.argv[2:])
print("Running the following command as immediate scheduled task:")
print(to_run)
print("Will return only once process matching wildcard \"{0}\" is no longer found".format(to_match))

subprocess.call('C:\\Windows\\System32\\schtasks /delete /f /tn "QUICKSCHTASK"', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
subprocess.call('C:\\Windows\\System32\\schtasks /create /tn "QUICKSCHTASK" /tr "{0}" /sc ONCE /st 00:00'.format(to_run), stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
subprocess.call('C:\\Windows\\System32\\schtasks /run /tn "QUICKSCHTASK"', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
time.sleep(0.1)

def processDead(proc):
   print("Process is now dead - {0}".format(proc))
   subprocess.call('C:\\Windows\\System32\\schtasks /delete /f /tn "QUICKSCHTASK"', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)

process = None
for proc in psutil.process_iter():
   if to_match in proc.name():
       gone, still_alive = psutil.wait_procs([proc], None, processDead)
       break

您可以從更高級別的腳本呼叫它來執行操作並規避雙跳。非常hacky,但它有效。腳本的範例用法是:

start /wait py -3 run_as_scheduled_task.py 'robocopy' 'robocopy SOURCE DEST'

另一種方法是使用 -s 標誌在目標機器上呼叫 psexec 以使用系統帳戶。更多資訊在這裡:https ://stackoverflow.com/questions/15242248/double-hop-access-to-copy-files-without-credssp

引用自:https://serverfault.com/questions/839761