2024年10月31日 星期四

Windows OpenSSH 除錯如何啟動 Log 查找錯誤原因

OpenSSH Windows 上如何啟動 Log 查找錯誤原因

操作需要管理員權限,記得用管理員權限打開 PowerShell


要修改的設定檔在這個位置

notepad C:\ProgramData\ssh\sshd_config


打開之後新增底下兩行

SyslogFacility LOCAL0
LogLevel Debug3


然後儲存後關閉重新啟動 sshd

Restart-Service -Name sshd


然後再試著觸發錯誤後查看下面的檔案

notepad C:\ProgramData\ssh\logs\sshd.log
notepad C:\ProgramData\ssh\logs\sshd-session.log

看報什麼錯誤順著去修好就行




2024年10月9日 星期三

新版本 Teams 在 Win11 bug 藍牙耳機聽不到對方講話或是麥克風沒聲音

先說一下藍牙耳機的構造其實有兩個通道,兩種模式。

  1. 高音質模式 (同時使用兩個通道) (佔用1.5個通道)
  2. 通話模式 (麥克風與耳機個別使用個別通道) (佔用完整2個通道)
在高音質模式模式下耳機不會出現佔用一個通道維持音質同時可以接收另一個耳機的連接。也就是在1模式下你還可以連接另一個裝置。

1.5是我隨意取個大概好分變得概念,想表達的概念是他還可以被第二個裝置控制,兩個通道都佔滿了就無法連接了,具體的情境如下。


佔用的例子 (電腦與手機都已經連線配對過)
  1. 手機使用耳機通話中,此時電腦無法連接第二個裝置。
  2. 電腦使用高音質模式聽音樂中,此時手機可以連接第二個裝置。
  3. 兩個裝置同時連接中,電腦正在聽音樂,手機提示聲響。會被手機奪權
    1. 電腦音樂暫時聽不到,耳機強制切換到手機
    2. 待聲音結束手機安靜幾秒後自動切回電腦音樂。
  4. 兩個裝置同時連接中,電腦正在聽音樂,手機進入通話模式。會被手機奪權
    1. 音效設定中藍牙耳機消失,藍牙設定中裝置保持連線
    2. 電腦音樂變成外放
    3. 藍牙耳機強制切換到手機
    4. 待通話結束手機安靜幾秒後自動切回電腦音樂。
  5. 兩個裝置同時連接中,手機正在通話中,此時電腦提示聲響。不會被奪權而是聽不到電腦的音樂。

通常耳機會把 裝置1 有更高的優先權,如何要換順序的話需要有第三臺設備參與才能換

先把當前的兩台都中斷,第三台接入這一台會變成裝置1,此實在接入原先那兩台的其中一台就會被改成裝置2,再把第三台退掉換回去即可調整成自己想要的優先順序了。

不然現有的兩台順序已定,要調只能把要成為裝置1的那台忘記配對,重配就會變裝置1了。


回到Teams 的正題,應該是今天 8 月左右的改版,也不確定是不是 Win11 系統改版導致的。會出現聽不到有兩種情況



1. 對方聽不到我講話

這個主要原因是藍牙聲道佔用導致的,只會出現在可以同時連接兩個裝置的耳機上。

首先只要有其他裝置正在連接中,並且處於非待機模式中,也就是有在播音樂,此時在新版本 Teams 觀察到的情況是耳機麥克風會失效,估計是沒切到通話模式。


解法很簡單把另一個裝置斷線取消掉佔用就好,或是者讓你要通話的那台成為裝置1。

不過讓通話電腦成為裝置1有另一個bug是,上面舉例的第4點,電腦音樂會變成外放。剛接上電話電腦就變成外放,說真的頗哭夭的。



2. 我聽不到對方講話

這個是 Win11 的 teams 一起組合後的bug
  1. Win11 開始取消手動選擇換模式的方式變成自動由系統判定了。
  2. Teams 在通話實會呼叫 WinAPI 告知系統現在是通話模式。

兩個邏輯單獨看都很正常,但組合在一起只要 Teams 沒有同時把音源與麥克設置成耳機,結果就會變成
  1. teams 通話後會通知 Win11 現在通話中,而 Win11 會把藍牙設置成通話模式。
  2. teams 只有聲音被設置成藍牙耳機,判定應該接收立體聲音,但是目前通話模式佔用中高音質通道沒有聲音。
兩個就錯開了你啥也聽不到。覺得至少跟隨系統設讓藍牙有低音質聲音奏合著用吧...


具體還有一個有趣的表現是通話結束後,由 teams 設置的強制通話模式被關掉,聲音恢復你可以從立體中模式中聽到掛斷的聲音,夠白癡吧www直接誤導推理啊。

這個無解了,目前的 teams 無法使用 [藍牙耳機+外接麥克風通話]。選一個吧...或是等他改版修好了。



2024年9月23日 星期一

Evernote 使用率過高

近期有發現 Evernote 總是不斷的持續保持在 10~20% 左右的 CPU 佔用,似乎都不會下降,大致查了一下發現這篇

錯誤:Evernote 在後台時CPU使用率異常高。: r/Evernote (reddit.com)


總之裡面給出了幾個解法,最快的大概就是直接切換倒市集版本,由於市集版本與獨立安裝阪本位置是一樣的,你可以幾乎無損的轉移過去。

直接解除安裝然後,重裝安裝市集版本,不用重新登入所有資料都還在。

猜測應該是市集版本呼叫的應用程式不是叫做 evernote.exe 吧,討論有提到改名就好了...

如此白癡的錯誤怎麼可以脫這麼久還不修


2024年9月22日 星期日

如何下載最新版本 VMware Workstation 17

如何下載最新版本 VMware Workstation 17

根據這篇討論 下載在哪裡??|VMware 工作站 (broadcom.com)

有人挖出官方的連結 https://softwareupdate.vmware.com/cds/vmw-desktop/ws/17.6.0/24238078/windows/core/


裡面中 VMware-workstation-17.6.0-24238078.exe.tar 最新版的載點

載下來會變成一個 tar 檔案,直接用 Winrar 或是 7z 可以打開


或是使用 PowerShell 執行下面的指令,會在原地解開

tar -xvf .\VMware-workstation-17.6.0-24238078.exe.tar





2024年9月18日 星期三

Pnp.PowerShell 新式登入方法 如何使用委任權限登入

Pnp.PowerShell 新式登入方法 如何使用委任權限登入

參考這兩篇文章的提示想通了

  1. PnP PowerShell を利用するための Microsoft Entra ID アプリケーションを登録する方法 (zenn.dev)
  2. 使用 PnP PowerShell 連接到 SharePoint Online - SharePoint 日記 (sharepointdiary.com)

簡單來說 2024-09-09 當天的改動是移除掉一個預設應用程式,該應用程式的ID是 31359c7f-bd7e-475c-86db-fdb8c937548e

報錯的信息是

AADSTS700016: Application with identifier ‘31359c7f-bd7e-475c-86db-fdb8c937548e’ was not found in the directory ‘<テナント名>’.
(‘31359c7f-bd7e-475c-86db-fdb8c937548e’は、PnP Managment Shell アプリケーションの共通の ID)

這應用程式是你不用自己新增也會自己有的,並且 PnP.PowerShell 預設會去叫這組應用程式來執行委任權限


委任權限的執行方法是需要過一組使用者帳號的

Connect-PnPOnline -Url $siteUrl -Credentials (Get-Credential)


如何呼叫別組應用程式,可以從環境變數中設定

$env:ENTRAID_APP_ID = $cliendId


也就是真正需要的只有

  1. 重建自己的應用程式
  2. 設置適當的委任權限
  3. 增加環境變數 ENTRAID_APP_ID = ClientID

如此一來對於沒有MFA認證的帳號,就一樣可以回復到原本的純帳密登入了。


開始之前記得先更新一下 PnP.PowerShell 夜間最新版,最近頻率很常估計bug很多。

# 移除所有版本
Uninstall-Module PnP.PowerShell -AllVersions -Force

# 安裝最新夜間版本
Install-Module -Name PnP.PowerShell -AllowPrerelease -Force

# 版本確認
Get-Module -ListAvailable PnP.PowerShell


* PnP.PowerShell要大於 2.12 版本才能作用,在此之前版本無法更改 ENTRAID_APP_ID 是無法登入的。




應用程式權限

對於權限先給一個通用權限,這個權限就足夠上傳檔案了。



測試委任權限先設置 AllSites.Manage 就足夠了,記得右邊要綠色打勾才會起作用。

即使上面寫不用管理權限也必須用管理員承認一次才能起作用,詳細原因我也不清楚。


你可以隨意丟一個文件上去試試看,能過就行了其他再自己摸索需要哪些權限

Add-PnPFile -Path "README.md" -Folder "Shared Documents"




完整的無應答登入代碼

注意使用純帳密登入必須移除MFA多重驗證 (或是有調過Policy安全政策)

# 設置登入信息
$cliendId = "Your-Client-ID"
$siteUrl  = "https://[TelentName].sharepoint.com/sites/[SiteName]"
$username = "[UserName]@[TelentName].onmicrosoft.com"
$password = "UserPassWord"
$credentials = New-Object System.Management.Automation.PSCredential($username, (ConvertTo-SecureString $password -AsPlainText -Force))

# 登入 SharePoint
$env:ENTRAID_APP_ID = $cliendId
Connect-PnPOnline -Url $siteUrl -Credentials $credentials

# 獲取網站文件目錄
Get-PnPFolder -Url "/Shared Documents"


* 記得確保 powershell 版本要大於7版, pnp.powershell 要大於 2.12 版本




2024年9月17日 星期二

使用 PowerShell 生成自簽署證書

使用 PowerShell 生成自簽署證書

基於 SharePoint 的無應答登入模式改版後必須使用證書,這邊提供一個最簡證書生成方法,直接使用 PowerShell 5.1 內建的函式即可。

不過有以下兩個小缺點

  1. 無法匯出空白密碼的證書 pfx 檔案。(有這個需求用 OpenSSL 生成吧)
  2. 無法直接生成檔案,必須先存入 Windwos Certificate Store 匯出後再刪除


# 1. 定義変数
$CNName = "PnP_Roks"
$OutPath = "D:\mycertificates"
$ExpiryYears = 10

# 2. 生成自簽署證書,存儲在當前用戶證書存儲區
if(-not (Test-Path $OutPath)) { mkdir $OutPath }
$cert = New-SelfSignedCertificate -Subject "CN=$CNName" -DnsName $CNName `
  -CertStoreLocation Cert:\CurrentUser\My `
  -NotAfter (Get-Date).AddYears($ExpiryYears).date
$cert
# 3. 將證書公鑰導出為 CER 檔案 (需上傳到應用程式中)
$cert |Export-Certificate -FilePath "$OutPath\$CNName.cer"


# 4. 將證書導出為 PFX 檔案 (選用)
$Pword = "YourPasswordHere"
$cert |Export-PfxCertificate -FilePath "$OutPath\$CNName.pfx" `
  -Password (ConvertTo-SecureString -String $Pword -Force -AsPlainText)

# 5. 從證書存儲區移除剛生成的證書 (選用)
$cert | Remove-Item

這樣就生成完畢了,如果沒有移除證書的話可以在 certmgr.msc 中的 個人/憑證 區域找到該生成的證書。


需要上傳到 "應用程式" 中的只有 cer 證書而已,包含私鑰的 pfx 檔案不可以外洩。

比較理想的辦法是直接在目標伺服器生成證書,然後只匯出 cer 公鑰上傳到伺服器,一定程度避免私鑰產生副本。

環境允許的話甚至可以設置成不可匯出徹底銷毀,沒了再造一個就行。


上傳完畢接下來登入可以參考這篇 身份驗證 |PnP PowerShell





讀取證書檔案

其中如果要讀取 Store 中的 pfx 檔案可以這樣用

# 當前使用者
Get-Item -Path "Cert:\CurrentUser\My\$($cert.Thumbprint)"

# 本機
Get-Item -Path "Cert:\LocalMachine\My\$($cert.Thumbprint)"

對應的管理介面是

  • 當前用戶: certmgr.msc
  • 本機電腦: certlm.msc





2024年9月13日 星期五

2024-09-09 SharePoint 禁用帳密登入改動 如何使用Application應用程式登入

2024-09-09 SharePoint 禁用帳密登入改動 如何使用Application應用程式登入

突然的改動導致原本使用帳密登入 SharePoint 的腳本變得無法執行了。

具體的錯誤信息是以下報錯 AADSTS50076 的信息

Connect-PnPOnline : AADSTS50076: Due to a configuration change made by your administrator, or because you moved to a ne

w location, you must use multi-factor authentication to access '00000003-0000-0ff1-ce00-000000000000'. Trace ID: a28ff3

72-9f22-4018-9c6a-1341a7b16900 Correlation ID: 85a19fdf-03b2-4804-8987-49055663a3e5 Timestamp: 2024-09-13 03:44:03Z



官方的說明參考這篇
PnP Management Shell EntraID app is deleted : what should I do ? · Issue #4250

這邊有提到得的解是這篇
Register an Entra ID Application to use with PnP PowerShell | PnP PowerShell

不過這篇有幾個小插曲,那個英文分段分的不是很明確很容易誤以為整篇都在講同一個方法,其實總共有三個方法。

第二個坑是 $result = Register-PnPEntraIDApp -ApplicationName “PnP Rocks” -Tenant [yourtenant].onmicrosoft.com -OutPath c:\mycrtificates -DeviceLogin

這行代碼在 2.12 版本有 bug 是不能跑得,詳見這篇解法就是單純升級版本就修好了。


下面讓我們開始吧。




環境準備

要滿足兩個條件

  • PowerShell 7
  • Pnp.PowerShell 2.12.3

這是因為 Pnp.PowerShell 2 是面向PowerShell

下面請用管理員權限打開 PowerShell 5.1 執行

PowerShell 7 安裝指令
在 Windows 上安裝 PowerShell - PowerShell | Microsoft Learn

winget install --id Microsoft.Powershell --source winget

然後輸入 Pwsh 切換到 PowerShell 7 版本

pwsh

啟動之後檢查一下版本

$PSVersionTable

然後安裝 Pnp.PowerShell

Install-Module PnP.PowerShell -AllowPrerelease -Force -SkipPublisherCheck
Get-Module -Name PnP.PowerShell -ListAvailable

到這邊必要的環境就都安裝完成了




註冊應用程式

在開始前記得確保你打開的終端機是 PowerShell 7


最省力的辦法是用 PnP.PowerShell 社群幫你做的懶人包。
Register an Entra ID Application to use with PnP PowerShell | PnP PowerShell

這邊示範登入使用 CertificateBase64Encoded 所以沒有把證書存下來。
(事實上 CertificateBase64Encoded 就是證書檔案二進制,能還原的)

$result = Register-PnPEntraIDApp -ApplicationName PnP_Rocks -Tenant [你的租戶名].onmicrosoft.com -Interactive

預設的租戶名 xxx.onmicrosoft.com
方法1:從你的網站 https://[你的租戶名].sharepoint.com 網址上找到。
方法2:組織通常會新增自己的域名比如說 xxx@gmail.com 中的 gmail.com 也可以用。沒新增的話預設是 xxx@xxx.onmicrosoft.com 兩個長一個樣。

 

執行之後會出現內部的.NET的UI登入介面,請注意必須使用具網域管理員權限的帳號登入,總共會要求登入兩次

  • 第一次是創建應用程式。(這次其實不用權限)
  • 第二次是讓網域管理員承認應用程式權限

完成之後可以通過查看 $result 獲取證書的 Base64Encoded

$result

記得將他保存下來

$result > C:\PnP_Rocks_Certificate.txt

然後我們利用這個資訊登入

Connect-PnPOnline 'https://[你的租戶名].sharepoint.com/sites/[你的網站名]' -ClientId $result."AzureAppId/ClientId" -Tenant [你的租戶名].onmicrosoft.com -CertificateBase64Encoded $result.Base64Encoded

到這邊就登入成功了

切記這個權限超級超級大,Base64Encoded內容一定要保護好。


創建完成之後可以在這個網址找到自動建立的應用程式


在這裡可以編輯權限


 (這邊截圖不是照上面來的參考用而已,上面設定完權限不應是委託而是應用程式)




註冊應用程式2 (儲存證書)

重複的就不講了留最重要的代碼就好,這是會把證書儲存下來的方法。

mkdir d:\mycertificates
$result = Register-PnPEntraIDApp -ApplicationName PnP_Rocks -Tenant [你的租戶名].onmicrosoft.com -OutPath d:\mycertificates -Interactive

證書輸出之後把 pfx 安裝到”個人”,然後用下面的方式登入



Connect-PnPOnline 'https://[你的網站].sharepoint.com/sites/Maple' -ClientId $result."AzureAppId/ClientId" -Tenant [你的租戶名].onmicrosoft.com -Thumbprint $result."Certificate Thumbprint"

總之把他設定成不可匯出就不用被幹走了,剩下的證書封存的方式在自己琢磨一下。





參考網站

  1. 身份驗證 |PnP PowerShell
  2. [BUG] Register-PnPEntraIDApp Hanging · Issue #4260 · pnp/powershell (github.com)
  3. PnP Management Shell EntraID app is deleted : what should I do ? · Issue #4250 · pnp/powershell (github.com)