動機
keepass2真的有點慢,所以換回去keepassxc,同時找一個辦法避免每次開機都要打master key 所以我把dropbox給裝上去了
windows
存master key
- 先到認證館管理員加master key,雖然說是明碼,但總比直接寫在script上好
- 裝
CredentialManager
Install-Module -Name CredentialManager -Scope CurrentUser
- 在powershell就可以用下面的script拿密碼
(Get-StoredCredential -Target keepassxc).GetNetworkCredential().password | keepassxc.exe --pw-stdin --keyfile $keyfile_path $dbfile_path --localconfig $localconf_path --config $conf_path
開機時執行
在startup中放跑指令的捷徑,這捷徑不能用New-Item
去生,Value的檢查不會過
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$home\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\mykeepassxc.lnk")
$Shortcut.TargetPath = "C:\Windows\System32\cmd.exe"
$Shortcut.Arguments = "/c start /min `"`" powershell -WindowStyle Hidden -Command `"$home\MyKeepassXC\StartCustomKeepass.ps1`""
$Shortcut.IconLocation = "C:\Program Files\KeePassXC\KeePassXC.exe"
$Shortcut.save()
ScheduledJob (keepassxc會跑在背景,會看不到)
- 用管理者權限開powershell
- 用下面的script就能在開機時跑指定的腳本
$trigger = New-JobTrigger -AtStartup
Register-ScheduledJob -Trigger $trigger -FilePath $home\MyKeepassXC\StartCustomKeepass.ps1 -Name StartCustomKeepass
設定hardlink
這裡是把local的config與dropbox的連在一起,只要改了設定就能同步到其他台
function Set-ConfAsHardLink {
param (
[string]$HostPath,
[string]$CloudPath
)
if(!(Test-Path -Path $HostPath)) {
New-Item -ItemType HardLink -Path $HostPath -Value $CloudPath
} elseif(!(Get-ItemProperty $HostPath).LinkType -eq "HardLink") {
Remove-Item $HostPath
New-Item -ItemType HardLink -Path $HostPath -Value $CloudPath
}
}
Set-ConfAsHardLink -HostPath "$home\AppData\Local\KeePassXC\keepassxc.ini" -CloudPath $localconf_path
Set-ConfAsHardLink -HostPath "$home\AppData\Roaming\KeePassXC\keepassxc.ini" -CloudPath $conf_path
powershell試用感想
把指令存成string
整體操作起來很像物件,但是還是有不順手的地方,像keepassxc.exe
因為沒有加到PATH所以要放絕對路徑
但是,直接用環境變數湊出來的路徑會有space!!
不會自己跳掉,所以沒辦法直接放到變數這個時候要用Invoke-expression
然而,Invoke-expression
前面接pipe,跑出來個結果不對,但是把pipe包到整個Invoke-expression
又很長
所以就變成不存變數直接展開了,原本以為所有指令都可以當成一級函數亂丟,結果不行
sudo
powershell沒有sudo,有人寫,但要裝 可以用runas,但是會彈出另一個視窗,不適合script去跑
對一個bash用習慣的人來說真的不習慣
物件
指令跑完可以像物件一樣存取,函數也是用named args,十分人性化,這點一定要給好評 還有居然可以在script看到type!! 這真的太贊了
linux(ubuntu)
存master key
- 用keyring
開機時執行
- 加下面的內容到
.config/autostart/StartCustomKeepass.sh.desktop
,沒有folder自己建
[Desktop Entry]
Type=Application
Exec=$HOME/MyKeepassXC/StartCustomKeepass.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=keepassxc
Name=keepassxc
Comment[en_US]=
Comment=
難搞的systemd
systemd可以管理proc的生存狀態,但是我真的用不起來,一個是所有指令要用絕對路徑 另一個最重要的是,我的keyring或是secret-tool在systemd中都拿不到密碼,這應該與keyring的實現機制有關,之後再看看
設定hardlink
linux沒有指令可以區分hardlink與一般file,只能用inode的編號
Set_ConfAsHardLink() {
hostPath=$1
cloudPath=$2
if [ ! -f $hostPath ];
then
ln $cloudPath $hostPath
else
hostInode=$(ls -i $hostPath | awk '{print $1 }')
cloudInode=$(ls -i $cloudPath | awk '{print $1 }')
if [ $hostInode -eq $cloudInode ];
then
rm $hostPath
ln $cloudPath $hostPath
fi
fi
}
Set_ConfAsHardLink $host_localconf_path $localconf_path
Set_ConfAsHardLink "$HOME/.config/keepassxc/keepassxc.ini" $conf_path
KeeShare
這個功能就是我想跳回來的其中一個理由
KeeShare就像分割db,可以選某個folder給別人看或改
使用步驟
- 先開keepassxc的keeshare讓他可以讀與寫keeshare的檔案 (只要設定一次)
- 到需要分出去的folder點編輯群組
- 到keeshare,選匯出(只寫出去)或同步(寫出去也接收其他的新增),存keeshare的檔案
- 開一個新的db檔,創一個folder
- 到keeshare,選匯入(只收來自source的更改)或同步(寫出去也接收其他的新增)
- 如果選同步可以在新的db寫一個entry,去存,之後到原本的db去看,會看到新的entry
Ref
Automatic Database Opening Database Sharing with KeeShare
How to store and read user credentials from Windows Credentials manager