802.1x 有线身份验证:如何让 NetworkManager 每次都询问身份?

802.1x 有线身份验证:如何让 NetworkManager 每次都询问身份?

我希望网络管理器每次连接到有线网络时都询问身份/用户名,我该如何实现?

我当前的配置是:

  • 802.1x 安全:已启用
  • 身份验证:受保护的 EAP (PEAP)
  • CA 证书:[我的 CA 证书]
  • PEAP 版本:自动
  • 内部身份验证:MSCHAPv2
  • 用户名: [我的用户名]
  • 密码:每次都询问此密码

我在系统网络设置 GUI 中配置了这些选项,没有要求输入用户名的选项,我不能将其留空。当身份验证对话框弹出时,我也没有更改用户名的选项。

我尝试使用 nmcli 为 802-1x.identity 设置一个空值(“”),希望我可以将其配置为使用 --ask 选项询问用户名,或者允许我在身份验证窗口中修改用户名:

nmcli c modify <UUID> 802-1x.identity ""

失败并显示错误:缺少 802-1x.identity

我也试过

nmcli c modify <UUID> -802-1x.identity "anon"

命令成功了,但是好像什么也没做。

编辑:我创建了一个 GUI,其中只有一个用户名文本框,在后台运行 nmcli(它更像是一个“概念验证”,尚未完成)。不确定这是否是一个好主意,我希望有一个“干净”的解决方案,但目前这可能对我有用。

import wx
from os import system
from shlex import quote

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title="Authentication", style=wx.CAPTION | wx.CLOSE_BOX)

        # Create UI elements
        self.textboxSize = wx.Size(400, -1)
        self.usernameCtrl = wx.TextCtrl(self, size=self.textboxSize)
        self.connectButton = wx.Button(self, label="Connect")

        # Create sizer and add UI elements
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(wx.StaticText(self, label="Username"), 0, wx.LEFT | wx.TOP, border=5)
        self.sizer.Add(self.usernameCtrl, 0, wx.EXPAND | wx.LEFT | wx.BOTTOM | wx.RIGHT, border=5)
        self.sizer.AddSpacer(5)
        self.sizer.Add(self.connectButton, 0, wx.EXPAND | wx.LEFT | wx.BOTTOM | wx.RIGHT, border=5)

        # Register button callback
        self.connectButton.Bind(wx.EVT_BUTTON, self.on_connect)
        self.connectButton.SetDefault()

        # Show the frame
        self.sizer.SetSizeHints(self)
        self.SetSizer(self.sizer)
        self.Show()

    def on_connect(self, ce):
        self.connectButton.Disable()
        if self.usernameCtrl.GetValue() == "":
            dlg = wx.MessageDialog(self, "Please enter your username", "Error", wx.OK | wx.ICON_ERROR | wx.CENTRE)
            dlg.ShowModal()
            self.connectButton.Enable()
            return
        system('nmcli c modify "MyNetwork" 802-1x.password-flags 2') # Make sure passwords aren't saved
        system('nmcli c modify "MyNetwork" 802-1x.identity "{}"'.format(quote(self.usernameCtrl.GetValue()))) # Enter the username
        system('nmcli c up "MyNetwork"') # Connect to network and ask for password
        wx.CallAfter(self.Close)
        return


if __name__ == '__main__':
    app = wx.App()
    frame = MyFrame()
    app.MainLoop()

相关内容