如何强制Windows终端下SSH连接时提示输入登录用户名
回答
Windows终端里调用的是原生OpenSSH客户端,本身没有提供能直接配置弹出login as:用户名提示的选项。你之前在.ssh/config里给Host *留空User字段的写法不生效,是因为OpenSSH解析配置时会直接跳过空值的配置项,最后还是会默认用当前Windows登录账号当连接用户名。
不用写复杂脚本的实现方法
根本不需要写复杂包装脚本,只要改下命令写法就能触发原生的用户名交互提示:
ssh @<servername>
只要@前面的用户名位置留空,OpenSSH就会主动弹出用户名输入提示,输完用户名就会进入后续的密钥/密码验证流程,和你用Putty、MobaXterm的交互逻辑完全一样。
要是觉得每次多打个@麻烦,加个极简的别名就行,比如在PowerShell的配置文件里加下面这段函数:
function ssh { param($Target) if ($Target -notmatch '@') { ssh.exe "@$Target" } else { ssh.exe $Target } }
加完之后你直接敲ssh <servername>就会自动弹出用户名输入提示,要是需要直接指定用户名连接,正常敲ssh 用户名@servername也完全不受影响。
补充:OpenSSH的配置优先级是「命令行参数 > 用户目录下的ssh/config > 系统级ssh_config > 当前系统登录用户」,没有任何内置配置项可以全局设置“默认不读取系统用户名、强制交互式输入用户名”,上面说的空用户名传参是原生客户端下实现这个效果最简便的方式。
内容的提问来源于stack exchange,提问作者affleks
相关产品推荐
相关产品推荐

