Windows - HowardWhile/2023_note GitHub Wiki

Windows

讓bat檔要求管理權限的方法

https://stackoverflow.com/questions/1894967/how-to-request-administrator-access-inside-a-batch-file

@echo off

:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params= %*
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params:"=""%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------    
    <YOUR BATCH SCRIPT HERE>

OpenSSH Offline install

參考

https://blog.miniasp.com/post/2021/12/11/How-to-setup-OpenSSH-Server-in-Windows

https://blog.miniasp.com/post/2021/12/12/Enhanced-Security-for-SFTP-SSH-File-Transfer-Protocol-on-Windows

http://www.coolsun.idv.tw/modules/xhnewbb/viewtopic.php?topic_id=1493

第1步 下載安裝包

https://github.com/PowerShell/Win32-OpenSSH/releases

可以直接用資料夾裡面載好的...

image-20220927194655099

這邊有個坑,最新版的V8.9.1.0p1-Beta,隨然ssh可以連線但是sftp一連上就會斷線。所以還是選擇與線上安裝一致的v8.1版本。

第2步 解壓縮

image-20220927195834998

解壓縮到C:\並將資料夾重新命名成OpenSSH。資料夾的內容長這樣:

image-20220927200420899

不一定要解壓縮到這個路徑,只是這個路徑比較好記,之後的終端機操作時比較方便。

第3步 安裝

這邊的安裝步驟比較特別不是透過setup.msi或是setup.exe安裝,而是透過終端機執行install-sshd.ps1安裝,是具有管理員權限的powershell終端機。

image-20220927202603388

具體方法如下:

image-20220927201647547

用管理員身分執行powershell

執行下列指令

 cd C:\OpenSSH\
 .\install-sshd.ps1

image-20220927202126043

此時在透過Get-Service sshpowershell的service中就可以看到sshd的服務(Stopped)出現。

image-20220927203201708

如果要反安裝只要執行uninstall-sshd.ps1,

第4步 啟動

安裝完成後執行下列指令來啟動openssh-server先用預設的配置來啟動

# 啟動 sshd 服務
Start-Service sshd
# 設定 sshd 服務自動啟動
Set-Service -Name sshd -StartupType 'Automatic'

嘗試登入這台 Windows 的 OpenSSH Server

ssh localhost

第5步 配置

有關使用者帳戶

建立一個帳號名稱為 ar 的使用者,使用 net user 命令快速建立使用者:

#net user ar * /ADD
net user ar emotion /ADD /EXPIRES:NEVER /PASSWORDCHG:NO
net accounts /maxpwage:unlimited
WMIC USERACCOUNT WHERE "Name='ar'" SET PasswordExpires=FALSE

多設定了兩個 /EXPIRES:NEVER W參數與另一個 /PASSWORDCHG:NO 參數,帳戶建立好之後其設定屬性定義如下圖示:

快速鍵Win + R 輸入 lusrmgr.msc

image-20221221154657319

image-20221221163055475

快速鍵Win + R 輸入secpol.msc

可以看到密碼最常使用期限由42天變為0(沒有限制)

image-20221221162430089

image-20221221162645438

有關ssh配置

初始化的配置檔將會出現在這個路徑當中C:\ProgramData\ssh\sshd_config

用附件中的sshd_config覆蓋後重新啟動openssh-server

Restart-Service sshd

這個配置檔的內容修改了兩處為了達成2功能

  • Port

因為port 22太敏感所以改成2222

image-20220927214514065

  • 限制特定使用者的權限

這裡的 Match User ar 就是只針對單一使用者 ar 進行設定,最後的 ForceCommand internal-sftp 就是為了讓該 ar 使用者無法使用SSH遠端登入主機,只能使用 SFTP 傳檔而已。這裡最重要的當然就是 ChrootDirectory 設定,他會把使用者「關在」特定一個目錄下,遠端透過 SFTP 操作檔案時,是完全看不到 Windows 電腦中的任何其他資料夾!

image-20220927214859077

有關防火牆

方法1 用指定應用程式的方式配置方法如下:

從控制台進入控制台\系統及安全性\Windows Defender 防火牆\允許的應用程式

image-20220927221925970

image-20220927222259835

方法2 用指定port的方式

開通port 2222

# 設定新的 OpenSSH Server 防火牆規則
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 2222

第6步 測試

用filezilla的sftp連線看看,主機的開頭一定要打sftp://才能指定使用sftp的通訊協定,記得從本機連線成功後,也要試試從另外一台電腦連線測是防火牆的配置是否妥當。

image-20220927215406834

ffmpeg 轉檔筆記

mov 轉 mp4

ffmpeg -i input.mov output.mp4

mov 轉 720p mp4

ffmpeg -i input.mov -s hd720 output.mp4

mov 轉 720p mp4 10 FPS

ffmpeg -i input.mov -s hd720 -r 10 output.mp4

Home