You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何配置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模块配合图形化确认弹窗:

  1. 创建确认脚本/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
  1. 给脚本加执行权限:chmod +x /usr/local/bin/ssh-confirm.sh
  2. 修改PAM配置/etc/pam.d/sshd,添加一行:
session required pam_exec.so /usr/local/bin/ssh-confirm.sh
  1. 重启sshd服务:sudo systemctl restart sshd

这样设置后,每次你发起SSH连接,朋友的电脑都会弹出明确的确认窗口,只有他点击允许,你才能建立会话,完美满足你的隐私保护需求!

内容的提问来源于stack exchange,提问作者Jeno

火山引擎 最新活动