PowerShell ssh Host 自动补全
2022-05-02 • 预计阅读时间 1 分钟
2022-05-02 • 预计阅读时间 1 分钟
目前主要使用的 shell
就是 PowerShell
了. 如何给他增加类似 zsh
或者 fish-shell
里面的 TAB
自动补全 ~/.ssh/config
中的 host
名称呢?
我们可以利用 Register-ArgumentCompleter来为 ssh
, scp
, sftp
增加自动补全
Register-ArgumentCompleter -CommandName ssh,scp,sftp -Native -ScriptBlock {
param($wordToComplete, $commandAst, $cursorPosition)
$lstHosts = Get-Content ~\.ssh\config|%{ if ($_.trim() -match "^Host\s[\w|_|\d|-]*$") {$_.ToString().Trim().split(" ")[1]}}
foreach ($val in $lstHosts) {
if ($val -like "$wordToComplete*") {
$val
}
}
}
此外我们还可以搭配 fzf
来实现一个更好的管理 ssh
连接方案.
function connect-ssh(){
Get-Content ~\.ssh\config|%{ if ($_.trim() -match "^Host\s[\w|_|\d|-]*$") {$_.ToString().Trim().split(" ")[1]}}|fzf|%{ssh $_}
}
之后你就可以通过 connect-ssh
的命令来选择或者根据你输入的内容缩小选择范围最终找到你想要连接的服务器.
不过这些的前提就是你服务器应该是通过 ~/.ssh/config
来管理的.而且host名称有些规律,不然一堆 IP
时间久了真的不容易记住那个是那个的.
这种方式的好处是和 linux
下面使用 ssh
的方式基本保持了一致,而且 ~/.ssh/config
也可以和 linux
下保持一致.