由于网络管理器给我带来了很多麻烦,我想更换它(可能wicd
或NM
来自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 安全性的情况,请执行以下操作:
打开终端并查找无线连接:
iwlist wlan0 s
(这s是扫描。wlan0是我的无线网卡,但每个用户可能不同。有些是 eth0,有些是 wlan2。您需要
sudo
执行此选项。要找出无线网卡的名称,只需键入 iwlist 并按TAB。这应该会自动完成带有网卡名称的行。您也可以iwconfig
在显示的列表中键入并查找名称。)如果您不知道无线设备的名称,请输入:
iwconfig
它将显示您的有线/无线设备及其名称。它们可能类似于 wlan0、wlan1、eth1、eth2……查找将显示您可见的所有可能的接入点 (AP)。在列表中看到路由器后,尝试连接它:
如果没有密码,请执行以下操作:
iwconfig wlan0 essid NAME_OF_ACCESS_POINT
例如
iwconfig wlan0 essid CYREX
之后,请确保使用,
dhclient
这样您就可以获得动态 IP,以防路由器没有为您分配 IP。这样您就可以连接到 CYREX 路由器。如果有密码则执行以下操作:
iwconfig wlan0 essid CYREX key PASSWORD
那应该使用您在那里提供的密码进行连接。
再次,
dhclient
连接后执行此操作以确保获得分配的 IP。确保正确连接总是好的,因此执行
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 密码,有几种方法可以做到这一点。我将提到两种最流行的方法:
打开终端并查找无线连接:
iwlist wlan0 s
(这s是扫描。wlan0是我的无线网卡,但每个用户可能不同。有些是 eth0,有些是 wlan2。您需要
sudo
执行此选项。要找出无线网卡的名称,只需键入 iwlist 并按TAB。这应该会自动完成带有网卡名称的行。您也可以iwconfig
在显示的列表中键入并查找名称。)如果您不知道无线设备的名称,请输入:
iwconfig
它将显示您的有线/无线设备及其名称。它们可能类似于 wlan0、wlan1、eth1、eth2……查找将显示您可见的所有可能的接入点 (AP)。在列表中看到路由器后,尝试连接它:
第 2.1 部分 WPA-SUPPLICANT 指南:使用 wpa_supplicant 连接到 WPA 路由器
在终端中输入以下内容(假设您已经
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 }
到目前为止,我们应该知道无线网卡接口的名称(例如: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
程序。现在我们有了无线接口卡名称和驱动程序名称,我们继续使用已经创建的配置文件使用以下格式来连接它:
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 即可。一些用户报告删除了哈希并只在配置中留下密码,例如:
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 路由器
网络管理器的优点在于它附带了一些不错的脚本和工具。其中两个是nmcli
和create_connection
(简洁的 Python 3 脚本),我们将在本例中使用它。
完成前面提到的步骤后,找到路由器的 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.
此后,您应该会从路由器获得一个分配的 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 版本)。为此,我们执行以下操作:
检查一下我们可以看到哪个 ESSID:
nmcli dev wifi
验证 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
这仅在您希望手动编辑/删除/添加连接的情况下才适用。
第六部分:登录时自动连接
对于您想要自动登录无线路由器的情况,请按照以下步骤操作:
打开
interface
文件:sudo nano /etc/network/interfaces
添加以下信息(假设您的接口称为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
保存文件并重启计算机。请注意,这将保存在可从同一台计算机访问的纯文本文件中。
奖励:找到你的无线连接的名称 GUI 样式
单击网络管理器并转到连接信息
转到包含无线网卡的选项卡
在此图中,该网卡名为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
/ nmtui
etc)尚未安装,因此至少在开始时,采用更手动的方法可能会有所帮助。
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