如何配置OpenSSH-server,使远程登录需对方手动授权确认?
嘿,这个需求太贴合实际了——既要能帮朋友远程解决问题,又要绝对尊重他的隐私,每次登录必须经过他的明确授权。针对Windows(毕竟是笔记本,大概率用这个系统)上的OpenSSH Server,我给你整理了亲测有效的方案,分步骤来:
方法:用自定义脚本触发交互式确认
核心思路是修改OpenSSH的配置,让每次远程连接都先运行一个弹出确认窗口的PowerShell脚本,只有你朋友点击「允许」,会话才会继续。
1. 创建确认脚本
首先在朋友的电脑上新建一个PowerShell脚本,比如放在C:\SSH-Tools\Login-Confirm.ps1(路径尽量不要有空格,避免权限或执行问题),内容如下:
# 加载Windows Forms组件用于弹出窗口 Add-Type -AssemblyName System.Windows.Forms # 获取当前活跃的用户会话(确保弹窗出现在朋友正在使用的桌面) $activeSession = quser | Where-Object { $_ -match 'Active' } | ForEach-Object { ($_ -split '\s+')[2] } if ($activeSession) { # 在活跃用户的会话中弹出确认窗口 $confirmResult = Invoke-Command -ScriptBlock { [System.Windows.Forms.MessageBox]::Show( "有人尝试通过SSH登录你的电脑,是否允许连接?", "SSH登录请求", [System.Windows.Forms.MessageBoxButtons]::YesNo, [System.Windows.Forms.MessageBoxIcon]::Question ) } -SessionId $activeSession # 根据用户选择处理会话 if ($confirmResult -eq 'Yes') { # 允许登录,启动默认PowerShell会话 $env:PATH += ";C:\Windows\System32\OpenSSH" Start-Process -NoNewWindow powershell.exe } else { Write-Host "登录请求已被拒绝" exit 1 } } else { # 没有活跃用户登录,直接拒绝连接 Write-Host "无活跃用户,拒绝SSH连接" exit 1 }
2. 修改OpenSSH配置
找到OpenSSH的配置文件C:\ProgramData\ssh\sshd_config(注意这个文件夹默认是隐藏的,需要在文件资源管理器中开启「显示隐藏项目」),打开后添加以下内容:
如果你想让所有远程登录都需要确认:
ForceCommand powershell.exe -ExecutionPolicy Bypass -File "C:\SSH-Tools\Login-Confirm.ps1"
如果你只想针对你的账号(或特定账号)生效:
Match User 你的SSH登录用户名 ForceCommand powershell.exe -ExecutionPolicy Bypass -File "C:\SSH-Tools\Login-Confirm.ps1"
3. 重启OpenSSH服务
以管理员身份打开PowerShell或命令提示符,执行以下命令重启服务:
net stop sshd net start sshd
关键注意事项
- 确保PowerShell执行策略允许运行脚本:可以以管理员身份运行
Set-ExecutionPolicy RemoteSigned(选择「Y」确认),这样既安全又能运行本地脚本。 - 给脚本文件设置合适的权限:右键脚本文件 → 属性 → 安全 → 确保
Network Service账户有「读取和执行」的权限(因为OpenSSH服务默认用这个账户运行)。
补充:如果朋友的电脑是Linux
如果是Linux笔记本,方案类似,用PAM模块配合图形化确认弹窗:
- 创建确认脚本
/usr/local/bin/ssh-confirm.sh:
#!/bin/bash # 获取当前登录用户的显示器环境变量 DISPLAY=$(who | grep -E '(:[0-9]+)' | head -n1 | awk '{print $NF}') export DISPLAY # 用zenity弹出确认窗口(如果是KDE可以换成kdialog) if zenity --question --text="有人尝试SSH登录你的电脑,是否允许?" --title="SSH登录请求" --timeout=30; then exit 0 else exit 1 fi
- 给脚本加执行权限:
chmod +x /usr/local/bin/ssh-confirm.sh - 修改PAM配置
/etc/pam.d/sshd,添加一行:
session required pam_exec.so /usr/local/bin/ssh-confirm.sh
- 重启sshd服务:
sudo systemctl restart sshd
这样设置后,每次你发起SSH连接,朋友的电脑都会弹出明确的确认窗口,只有他点击允许,你才能建立会话,完美满足你的隐私保护需求!
内容的提问来源于stack exchange,提问作者Jeno




