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


113

由于网络管理器困扰我这么多,我想取代它(可能wicdNMPPA:volanin)。

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

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


2
如果您要弄乱系统的网络连接管理器,我建议您在通过有线以太网进行连接时这样做,这样就不太可能失去其连接,并且在需要时更容易从命令行进行设置。
瑞安·汤普森

我使用wicd-curses,到目前为止,它是最简单的用户界面。您需要使用<kbd>→</ kbd>(向右箭头键->)来设置配置。根据屏幕上的说明,其他所有内容都很明显。
同构

Answers:


139

这适用于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

如果使用传统的init.d方法: sudo /etc/init.d/networking restart

如果使用旧版新贵方式: 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
    

    那应该使用您在此处输入的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

    其中Virus是我的路由器的名称,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在一台PC 上使用的尝试均无效,但在另一台PC上,这是我第一次尝试的方法。因此,请同时发布这两种方法,以帮助解决每种情况,并使用户更轻松地确定所需的方法。

第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 connect ESSID_NAME密码ESSID_PASSWORD ifname WIRELESS_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可以为truefalse,这意味着如果设置为false,则将断开由网络管理器管理的所有网络连接。请注意,nmcli不需要root权限。

要查看Network Manager type的状态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  

现在让我们说我们要删除Xcentral,然后继续执行以下命令:

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

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

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

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

  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,它将显示所有可用的无线网卡。


3
如果找到了另一种命令行方式来查找无线接口的名称。键入iwlist两次后,按tab键,终端将在iwilst
Suhaib

2
我可以正确地猜出作者在看答案的完整性。
Jobin

1
@douglaswalrath您将使用引号,例如在“糖仙子”中
Luis Alvarado

感谢广泛的指导!我想知道是否还有其他方法可以在启动时链接无线,而无需在文件中以纯文本形式编写密码。您有任何想法吗?
米歇尔2014年

1
@Michele,此其他答案为如何防止将密码保存在历史记录中提供了指导askubuntu.com/a/279333/237654
Hector Correa

36

如果您知道该怎么做,这将非常容易。

显示可用的无线接入点:

nmcli dev wifi

与接入点连接:

nmcli dev wifi connect $ACCESS_POINT password $PASSWORD

2
这比Alvarado的投票结果要好得多,Alvarado的回答在我的案例中不起作用(Linux Mint 17.1)。但这很简单,而且很有效!
Thorben 2015年

1
在Linux Mint 17上为我工作
David Okwii,2015年

这是我的最佳答案。快速,简单,安全。谢谢!。
GTRONICK

3
@Thoben恕我直言,这不是公认的答案,因为network manager command line interface没有回答原始问题How to connect without a network manager
Vorac

+1是因为此答案虽然不适用于问题,但在恢复模式下可以帮助某人并节省时间。优秀的工作用户。
路易斯·阿尔瓦拉多

13

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

wicd-cli -y -c -m MY_NETWORK_SSID

您也可以“只是”拥有wpa_supplicant配置,例如:

/ etc / network / interface:

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可以让您提供加密的或可能只是混淆的密钥,请检查手册页),还使该文件仅拥有并可读从根本上讲是一种缓解措施。

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


默认情况下未安装wicd,不确定它是否与网络管理器兼容。
guntbert

它不兼容。您可以关注help.ubuntu.com/community/WICD
tr33hous 2014年

5

我使用wicd-curses,到目前为止,它是最简单的用户界面。

诅咒

您需要使用(向右箭头键->)设置配置;根据屏幕上的说明,其他所有内容都很明显。

当然,您需要找到一些无需使用Internet即可上网的方法wicd;我假设您已经解决了这个问题,否则您将不会发布。

(这对OP来说不及时,只是张贴后代,因为这个问题仍然出现在Google上。对于Google搜寻者:如果您是从咖啡馆或朋友的计算机或其他设备上阅读此书,也许您可​​以在某处使用电汇进行wicd-curses安装sudo apt-get install wicd-curses;然后确保在离开之前可以在已知可以正常工作的网络上对其进行测试!)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.