PowerShell遠端會話之大檔案傳輸
阿新 • • 發佈:2020-12-12
在運維當中,最經常要碰上檔案在各個伺服器之間的傳輸,而使用PowerShell來管理伺服器的檔案傳輸同樣也有很多種方式,如果僅僅是傳輸些小檔案的話,那麼像Scp,Sftp,Copy-Item等等這些都能很輕易的解決問題。
但是,如果要傳輸的檔案很大,好幾個G,甚至是好幾十個G的情況下,這些工具就顯得很吃力了。
最經常碰上的情況是如下這種情況
PCA遠端SSH到PCB上,PCB要從Server上面把檔案傳輸回來,在SSH或是PowerShell上面來,這種情況就是多跳遠端控制
我們使用遠端連線了PCB,在遠端PCB中再想進行遠端操作,就會提示錯誤。因為預設的認證資訊只會傳遞一跳。
關於多跳,微軟官方文件有給出的解決方案是:https://docs.microsoft.com/en-us/powershell/scripting/learn/remoting/ps-remoting-second-hop?view=powershell-7
多種解決方案的核心點就是需要憑據。
而密碼和基於金鑰的身份驗證之間的雙跳最大差異就是:
1、通過密碼身份驗證開啟的遠端會話具有附加到它的使用者憑據,因此能夠作為使用者進行出站身份驗證。
2、通過基於金鑰的身份驗證開啟的遠端會話沒有關聯的使用者憑據,因此不能作為使用者進行出站身份驗證。這是系統設計的,並且遵循標準 Windows 安全規則。
但是我們在使用OpenSSH的時候,我們有的時候就是隻想使用基於金鑰的這種認證方式,通過金鑰我們又沒辦法關聯使用者憑據,那我們又該怎麼辦呢?
那我們就通過Windows的任務計劃來實現,通過遠端登入到PCB上面之後,通過建立任務計劃----》執行任務計劃,這樣在任務計劃裡面建立的傳輸就能達到最大速度。
以下是一個範例,僅供參考:
$PS=New-PSSession -HostName PCB -KeyFilePath d:\id_rsa
$scripts = {
$schaction = New-ScheduledTaskAction -Execute "robocopy" -Argument " \\Server\Share\Test D:\Test\ *.*";
$schtrigger = New-ScheduledTaskTrigger -AtLogOn;
$schUser = (Get-CimInstance -ClassName win32_ComputerSystem).UserName;
Register-ScheduledTask -TaskName "copy" -Trigger $schtrigger -User $schUser -Action $schaction;
Start-ScheduledTask -TaskName "copy";
}
Invoke-Command -Session $PS -ScriptBlock $scripts
這段程式碼的意思就是PCB從Server伺服器上面的Share\Test資料夾下載到D盤目錄下的Test下面