Windows
在 Windows PowerShell 7 .ps1 腳本中 SSH 後遠端執行 Shell/Linux 命令
我試圖找到最簡單、最直接的方式在
.ps1
PowerShell 腳本中的 SSH 之後在 Linux 伺服器上執行命令,在 Windows 10 上執行 PowerShell 7。我有一個通過 SCP/PuTTY 上傳 zip 文件的過程,完成後,我的腳本 SSH 進入伺服器,然後我需要執行幾個 Linux 命令來解壓縮文件並執行 Docker 建構/組合。
# param1: destination server ip $ip=$args[0] # param2: path on the server $path=$args[1] # param3: username $un=$args[2] # param4: password # TODO: figure out how to hide $pw=$args[3] # source path if (!$pw) { throw "Password can't be null." } $src = "../" # construct archival name $DateTime = (Get-Date -Format "yyyyMMddHHmmss") $zip = "..\deploy_archive\deploy-$DateTime.zip" # Create archive mkdir -Force ..\deploy_archive # exclusion rules. $files = Get-ChildItem -Path $src -Exclude @("node_modules", "deploy_archive") # Compress Compress-Archive -Path $files -DestinationPath $zip -CompressionLevel Fastest # Report status Write-Output "`nZipped archive: $($zip)" # PuTTY SCP file transfer command $Cmd = ("pscp -l {0} -pw {1} -batch {2} {3}:{4}" -f $un,$pw,$zip,$ip,$path) Write-Output "cmd: $Cmd" Invoke-Expression "& $( $Cmd )" # Report success Write-Output ("`nUploaded to {0}:{1}" -f $ip,$path) # Connect via SSH ssh ("{0}@{1}" -f $un,$ip) # ...NOW DO STUFF ON THE REMOTE SERVER # ...like unzip and run Docker build
我可以添加一個老式的 ssh 命令,例如:
ssh username@some.ip.add.ress
然後它會詢問我的密碼並成功連接,但之後我添加的腳本直到我退出 SSH 會話後才會執行。
如果我使用:
# SSH-Sessions -ComputerName $ip -Username $un -Password $pw
我得到:
> [some.ip.add.ress] The background process reported an error with the > following message: The SSH client session has ended with error > message: subsystem request failed on channel 0.
uname -a
在伺服器上給了我:Linux azrahznval0002 3.10.0-1160.15.2.el7.x86_64 #1 SMP Thu Jan 21 16:15:07 EST 2021 x86_64 x86_64 x86_64 GNU/Linux
我在提出相關問題的 StackOverflow 上找到了解決方案和部分答案。我沒想到會在那裡找到它……但是您可以在命令中內聯執行命令
ssh
,這很直覺,並且考慮到在大多數情況下您希望如何執行此類操作,這很明顯。我怎麼是第一個在這裡發布解決方案的人,大聲笑?每個人都應該知道這一點。
仍然想知道為什麼我的 SSH-Sessions 命令不起作用,但這可能是伺服器上的東西……