PowerShell ssh Host 自动补全

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 下保持一致.

devpowershell

wentao

写点代码,解决点问题。

PowerShell下Maven自动补全

nyagos解析ssh_config