如何在终端中手动连接和断开网络?

如何在终端中手动连接和断开网络?

由于网络管理器给我带来了很多麻烦,我想更换它(可能wicdNM来自ppa:伏安宁)。

我不知道如何在不使用网络管理器的情况下通过终端连接和断开网络。

我想要一种命令行方式来管理网络。

答案1

这适用于 12.04+,因为这些是我可以测试的版本,但也可以在旧版本中使用。我把本指南分成几个部分,包括:

  • 第1部分没有密码或 WEP 密钥的无线路由器
  • 第2部分具有 WPA 或 WPA2 安全密钥的无线路由器
    • 第 2.1 部分使用 wpa_supplicant 连接 WPA 路由器
    • 第 2.2 部分使用网络管理器连接 WPA 路由器
  • 第 3 部分通过 nmcli 轻松连接
  • 第 4 部分断开与无线路由器的连接
  • 第 5 部分删除连接(包括配置文件)
  • 第 6 部分登录后自动连接
  • 奖金如何通过 GUI 查找网络接口名称

根据无线网卡、无线安全和无线路由器设置,可以使用以下命令行进行连接和断开连接。继续操作之前,请确保网络服务已启用(对于您可能使用恢复模式启动 Ubuntu 的情况):

根据您的 Ubuntu 版本,您需要使用以下方式之一启动它:

如果使用 SystemD(自 14.10 起):

sudo systemctl start networking

如果使用 Legacy init.d 方式:sudo /etc/init.d/networking restart

如果使用 Legacy Upstart 方式:sudo service network-manager restart

第 1 部分:无密码或 WEP 密钥的无线路由器

对于无线路由器没有密码或 WEP 安全性的情况,请执行以下操作:

  1. 打开终端并查找无线连接:

    iwlist wlan0 s  
    

    (这s是扫描。wlan0是我的无线网卡,但每个用户可能不同。有些是 eth0,有些是 wlan2。您需要sudo执行此选项。要找出无线网卡的名称,只需键入 iwlist 并按TAB。这应该会自动完成带有网卡名称的行。您也可以iwconfig在显示的列表中键入并查找名称。)

    如果您不知道无线设备的名称,请输入:iwconfig它将显示您的有线/无线设备及其名称。它们可能类似于 wlan0、wlan1、eth1、eth2……

  2. 查找将显示您可见的所有可能的接入点 (AP)。在列表中看到路由器后,尝试连接它:

    如果没有密码,请执行以下操作:

    iwconfig wlan0 essid NAME_OF_ACCESS_POINT  
    

    例如

    iwconfig wlan0 essid CYREX  
    

    之后,请确保使用,dhclient这样您就可以获得动态 IP,以防路由器没有为您分配 IP。这样您就可以连接到 CYREX 路由器。

    如果有密码则执行以下操作:

    iwconfig wlan0 essid CYREX key PASSWORD
    

    那应该使用您在那里提供的密码进行连接。

    再次,dhclient连接后执行此操作以确保获得分配的 IP。

  3. 确保正确连接总是好的,因此执行iwconfig以确保您的无线网卡已连接到您上面提到的 SSID。它应该显示您的设备已连接并且分配给您的 IP。如果没有,并给您一个错误,如接口不支持扫描尝试以下两个选项:

    • 测试你的接口是否正常:sudo ifconfig wlan0 up
    • sudo在扫描时尝试添加:sudo iwlist wlan0 s
    • 尝试关闭设备然后重新启动:

      sudo ifconfig wlan0 down  
      sudo ifconfig wlan0 up
      

第 2 部分:具有 WPA 或 WPA2 安全密钥的无线路由器

如果无线路由器有 WPA/WPA2 密码,有几种方法可以做到这一点。我将提到两种最流行的方法:

  1. 打开终端并查找无线连接:

    iwlist wlan0 s  
    

    (这s是扫描。wlan0是我的无线网卡,但每个用户可能不同。有些是 eth0,有些是 wlan2。您需要sudo执行此选项。要找出无线网卡的名称,只需键入 iwlist 并按TAB。这应该会自动完成带有网卡名称的行。您也可以iwconfig在显示的列表中键入并查找名称。)

    如果您不知道无线设备的名称,请输入:iwconfig它将显示您的有线/无线设备及其名称。它们可能类似于 wlan0、wlan1、eth1、eth2……

  2. 查找将显示您可见的所有可能的接入点 (AP)。在列表中看到路由器后,尝试连接它:

第 2.1 部分 WPA-SUPPLICANT 指南:使用 wpa_supplicant 连接到 WPA 路由器

  1. 在终端中输入以下内容(假设您已经wpasupplicant安装了该软件包,该软件包安装了我们将在此处使用的所有必需命令):

    wpa_passphrase SSID PASSWORD > CONFIG_FILE
    

    例子:wpa_passphrase Virus LinuxFTW > wpa.conf

    在哪里病毒是我的路由器名称,LinuxFTW是密码,wpa.conf是我要存储所有这些信息的文件。请注意,您可以将文件保存在其他位置,许多用户将文件保存在/etc/wpa_supplicant.conf而不是 中wpa.conf。wpa.conf 文件的数据应如下所示:

    network={  
            ssid="Virus"  
            #psk="LinuxFTW"  
            psk=1d538d505f48205589ad25b2ca9f52f9cbb67687e310c58a8dd940ccc03fbfae  
    }  
    
  2. 到目前为止,我们应该知道无线网卡接口的名称(例如:Wlan0、eth2、Wlan2……)。我们现在需要知道正在使用哪个驱动程序。为此,我们输入:

    wpa_supplicant
    

    它应该会向我们显示很多信息,但会有一个名为 **Drivers* 的部分显示所有可用的驱动程序(这些驱动程序在编译时可用wpa_supplicant)。 在我的情况下,它是这样的:

    drivers:  
      wext = Linux wireless extensions (generic)  
      nl80211 = Linux nl80211/cfg80211  
      wired = Wired Ethernet driver  
      none = no driver (RADIUS server/WPS ER)  
    

    整个列表是 hostap、hermes、madwifi、wext、broadcom、wired、roboswitch、bsd、ndis。这可能会根据wpa_supplicant编译方式而变化,但对我来说显示的应该与您系统上的类似。大多数用户会选择驱动wext程序。

  3. 现在我们有了无线接口卡名称和驱动程序名称,我们继续使用已经创建的配置文件使用以下格式来连接它:

    wpa_supplicant -iINTERFACE_NAME -cCONFIGURATION_FILE -DDRIVER_NAME
    

    例如:

    wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf -Dwext
    

    其中-i是您的接口卡名称,-c是您的配置文件所在位置,-D是您将用于连接的驱动程序的名称。 如果连接正确,则我们按CTRL+C取消连接,然后再次执行该行,但这次我们将其发送到后台,以便-B我们可以继续使用终端:

    wpa_supplicant -B -iwlan0 -c/etc/wpa_supplicant.conf -Dwext  
    

    之后只需sudo dhclient wlan0从路由器获取 IP 即可。

  4. 一些用户报告删除了哈希并只在配置中留下密码,例如:

         network={  
                ssid="Virus"  
                psk="LinuxFTW"  
        }  
    

    其他人已将 ssid_scan 添加到配置文件中:

        network={  
                ssid="Virus"
                scan_ssid=1  
                #psk="LinuxFTW"  
                psk=1d538d505f48205589ad25b2ca9f52f9cbb67687e310c58a8dd940ccc03fbfae  
        }  
    

    甚至添加 Key 类型:

        network={  
                ssid="Virus"
                scan_ssid=1  
                key_mgmt=WPA-PSK
                #psk="LinuxFTW"  
                psk=1d538d505f48205589ad25b2ca9f52f9cbb67687e310c58a8dd940ccc03fbfae  
        }  
    

    更多详细信息请参阅man wpa_supplicant.conf

第 2.2 部分 网络管理器指南:使用网络管理器连接到 WPA 路由器

网络管理器的优点在于它附带了一些不错的脚本和工具。其中两个是nmclicreate_connection(简洁的 Python 3 脚本),我们将在本例中使用它。

  1. 完成前面提到的步骤后,找到路由器的 SSID 名称(记住上面的部分iwlist),我们执行以下操作:

    sudo /usr/share/checkbox/scripts/create_connection -S SECURITY_TYPE -K PASSWORD SSID_NAME
    

    在哪里安全是路由器使用的安全类型(WPA、WEP),密码是.. 嗯..密码,SSID_NAME 是路由器的 SSID 名称。例如:

    sudo /usr/share/checkbox/scripts/create_connection -S wpa -K LinuxFTW Virus
    

    将为网络管理器创建一个连接,其内容如下:

      $ sudo /usr/share/checkbox/scripts/create_connection -S wpa -K LinuxFTW Virus
      [sudo] password for cyrex: 
      Connection Virus registered
      Connection Virus activated.
    
  2. 此后,您应该会从路由器获得一个分配的 IP。如果没有,只需执行sudo dhclient wlan0此操作(假设 wlan0 是您的接口名称)。您还可以使用 nmcli 检查网络管理器的连接,如下所示:nmcli c它应该显示类似以下内容:

     $ nmcli c
      NAME                      UUID                                   TYPE              TIMESTAMP-REAL                    
      Xcentral                  f51a5a64-8a91-47d6-897c-28efcd84d2b0   802-11-wireless   Fri 22 Mar 2013 02:25:54 PM VET   
      Realtek                   9ded7740-ad29-4c8f-861f-84ec4da87f8d   802-3-ethernet    Tue 05 Mar 2013 01:18:31 AM VET   
      Intel                     e25b1fd8-c4ff-41ac-a6bc-22620296f01c   802-3-ethernet    Fri 05 Apr 2013 10:04:05 PM VET   
      Virus                     3f8ced55-507b-4558-a70b-0d260441f570   802-11-wireless   Tue 09 Apr 2013 06:31:10 AM VET   
    

我提到网络管理员的方法是因为有几种情况使用 wpa_supplicant根本行不通(路由器和无线网卡之间的问题、安全问题等)。就我而言,在wpa_supplicant一台电脑上尝试使用的所有方法都行不通,但在另一台电脑上第一次尝试就成功了。因此,我发布了这两种方法,以帮助解决每种情况,并让用户更容易决定他们想要哪种方法。

第 3 部分:通过 nmcli 轻松连接

虽然我们已经讨论了不使用网络管理器连接它的方法,但在适用的情况下,也可以使用 nmcli(网络管理器的 CLI 版本)。为此,我们执行以下操作:

  1. 检查一下我们可以看到哪个 ESSID:

    nmcli dev wifi
    
  2. 验证 ESSID 的名称,然后我们继续在下一行使用它,包括所需的密码(包括 WEP 和 WPA 类型的密码):

    nmcli dev wifi connect ESSID_NAME password ESSID_PASSWORD
    

    下面是我连接到 ESSID Linux5G 的示例

    截屏

    ifname如果您的计算机上有多个无线设备,则可以使用如下参数指定使用哪一个:

    nmcli dev wifi连接ESSID_NAME密码ESSID_PASSWORD ifnameWIRELESS_DEVICE_NAME

    例如,在我的情况下,设备的名称是,wlp9s0因此我将使用此行来指定我将用于连接的设备:

    截屏

可以使用 help 参数获取有关 nmcli 的更多信息。例如,如果您想了解有关 的信息,您nmcli dev可以输入nmcli dev help。如果您想了解有关 的更多信息nmcli dev wifi,您可以输入nmcli dev wifi help等等。

第 4 部分:断开无线路由器的连接

有几种方法可以实现这一点:

  • 通过“强制”断开连接:sudo ifconfig wlan0 down

    这将关闭无线网卡接口(驱动程序关闭)。要打开它,只需键入 ,ifconfig wlan0 up然后键入sudo dhclient wlan0。如果通过网络管理器查看,它仍会显示为已连接,但实际上没有连接到路由器。尝试这样做ping会引发connect: Network is unreachable错误。

  • 释放 DHCP IP:sudo dhclient -r wlan0

    记得重新给sudo dhclient wlan0自己分配一个IP。

  • 使用网络管理器断开连接:nmcli nm enable false

    其中 nm 是 nmcli 的参数,用于管理和设置网络管理器的状态。该选项enable可以是真的或者错误的,意思是如果设置为错误的,所有由 Network Manager 管理的网络连接将会断开。注意,nmcli 不需要 root 权限。

要查看网络管理器类型的状态nmcli nm,它应该显示类似以下内容:

      $ nmcli nm
      RUNNING         STATE           WIFI-HARDWARE   WIFI       WWAN-HARDWARE   WWAN      
      running         connected       enabled         enabled    enabled         enabled   

打开或关闭连接(连接/断开连接)的另一种方法是执行以下操作:

nmcli c down id NAME` - Will disconnect the connection NAME  

nmcli c up id NAME` - Will connect the connection NAME

第 5 部分:删除连接

删除现有连接相当容易。首先在终端中输入:

nmcli c

它将输出类似这样的内容:

$ nmcli c
NAME                      UUID                                   TYPE              TIMESTAMP-REAL                    
Realtek                   9ded7740-ad29-4c8f-861f-84ec4da87f8d   802-3-ethernet    Tue 05 Mar 2013 01:18:31 AM VET   
PrivateSys                86b2b37d-4835-44f1-ba95-46c4b747140f   802-11-wireless   Sun 21 Apr 2013 07:52:57 PM VET   
pepe                      9887664b-183a-45c0-a81f-27d5d0e6d9d8   802-11-wireless   Thu 18 Apr 2013 02:43:05 AM VET   
Virus                     3f8ced55-507b-4558-a70b-0d260441f570   802-11-wireless   Tue 16 Apr 2013 11:33:24 AM VET   
Intel                     e25b1fd8-c4ff-41ac-a6bc-22620296f01c   802-3-ethernet    Sun 21 Apr 2013 08:12:29 PM VET   
Xcentral                  f51a5a64-8a91-47d6-897c-28efcd84d2b0   802-11-wireless   Fri 22 Mar 2013 02:25:54 PM VET  

现在假设我们要删除中央,然后我们继续执行以下命令:

nmcli c delete id Xcentral

完成后看起来应该是这样的:

$ nmcli c delete id Xcentral
$ nmcli c
NAME                      UUID                                   TYPE              TIMESTAMP-REAL                    
Realtek                   9ded7740-ad29-4c8f-861f-84ec4da87f8d   802-3-ethernet    Tue 05 Mar 2013 01:18:31 AM VET   
PrivateSys                86b2b37d-4835-44f1-ba95-46c4b747140f   802-11-wireless   Sun 21 Apr 2013 07:52:57 PM VET   
pepe                      9887664b-183a-45c0-a81f-27d5d0e6d9d8   802-11-wireless   Thu 18 Apr 2013 02:43:05 AM VET   
Virus                     3f8ced55-507b-4558-a70b-0d260441f570   802-11-wireless   Tue 16 Apr 2013 11:33:24 AM VET   
Intel                     e25b1fd8-c4ff-41ac-a6bc-22620296f01c   802-3-ethernet    Sun 21 Apr 2013 08:12:29 PM VET   

所有连接都存储在/etc/NetworkManager/system-connections/

如果我现在查看该文件夹,我会看到以下文件:

$ ls /etc/NetworkManager/system-connections
Intel  pepe  PrivateSys  Realtek  Virus

这仅在您希望手动编辑/删除/添加连接的情况下才适用。

第六部分:登录时自动连接

对于您想要自动登录无线路由器的情况,请按照以下步骤操作:

  1. 打开interface文件:

    sudo nano /etc/network/interfaces
    
  2. 添加以下信息(假设您的接口称为wlan0):

    auto wlan0
    iface wlan0 inet static
    address ASSIGNED_IP
    netmask 255.255.255.0
    gateway THE_GATEWAY
    wireless-essid YOURSSID
    wireless-key WIRELESSKEY_HERE
    
  3. 保存文件并重启计算机。请注意,这将保存在可从同一台计算机访问的纯文本文件中。

奖励:找到你的无线连接的名称 GUI 样式

  1. 单击网络管理器并转到连接信息

    截屏

  2. 转到包含无线网卡的选项卡

    截屏

在此图中,该网卡名为eth1(括号内)但对于每个用户来说,这可能有所不同。通常它是一个 wlan(如 wlan0、wlan1、wlan2...),但也可以是 eth1、eth2 等。因此您需要查看它的名称。

另一种快速找到名称的方法是输入iwconfig,将显示所有可用的无线网卡。

答案2

如果你知道如何做的话,这非常容易。

显示可用的 WLAN 接入点:

nmcli dev wifi

与接入点连接:

nmcli dev wifi connect $ACCESS_POINT password $PASSWORD

答案3

wicd 带有 2 个命令行实用程序:wicd-curses 和 wicd-cli(可能需要单独安装)wicd-curse 允许您以交互方式配置/连接网络(有线或无线),wicd-cli 提供相同的功能,但仅通过命令行选项(对脚本有用)我在 cron 作业中使用它来解决一些自动重新连接错误:

wicd-cli -y -c -m MY_NETWORK_SSID

您也可以“只”拥有如下 wpa_supplicant 配置:

在/etc/网络/接口:

auto wlan0 
iface wlan0 inet dhcp 
wpa-conf /etc/wpa.conf

以及(作为 WPA 示例)/etc/wpa.conf:

network={
  ssid="MY_NETWORK_SSID"
  proto=RSN
  key_mgmt=WPA_PSK
  pairwise=CCMP_TKIP
  group=CCMP_TKIP
  psk="my network key in the clear"
}

对此有很多考虑,其中以明文形式使用预共享密钥的安全性问题(wpa_supplicant 可以让您提供加密的或者只是模糊的密钥,请查看手册页),同时使该文件只有 root 拥有和可读是一种缓解措施。

思考拥有多个网络部分将能够按优先级顺序连接多个网络。

答案4

Ubuntu 18.04+ 不使用 NetworkManager 的解决方案

在刚刚安装了 Ubuntu Server 20.04 的 RasPi 上工作:NetworkManager(nmcli/ nmtuietc)尚未安装,因此至少在开始时,采用更手动的方法可能会有所帮助。

Ubuntu 的底层网络似乎由 18.04 版及以上版本处理netplan,因此这些版本需要配置这些。一个有用的走访提供答案;简而言之(例如),

确定你的 wifi 接口的名称,

$ ip a

(通常是wlan0- 在 的输出中查找ip a)。现在编辑/etc/netplan/50-cloud-init.yaml

$ sudo vi /etc/netplan/50-cloud-init.yaml

(其他编辑器也可用等)并添加wifis:如下部分,

network:
    ethernets:
        eth0:
            dhcp4: true
            optional: true
    version: 2
    wifis:
        wlan0:
            optional: true
            access-points:
                "network-name-here":
                    password: "wifi-password-here"
            dhcp4: true

启用它,

$ sudo netplan apply

最后通过查找wlan0接口和相应的 IP 地址来检查你的 wifi 是否已启动,

$ ip a

相关内容