网站搜索

如何通过 SSH 为远程 Linux 系统分配 IP 地址


通过 SSH 使用 nmcli 命令轻松配置远程 Linux 系统的 IP 地址。

我们已经学习了如何为 Linux 系统设置静态 IP 地址,以及如何在 Linux 系统上配置多个 IP 地址。在本指南中,我们将学习如何使用 nmcli 命令将 IP 地址分配给远程 Linux 系统

您可能需要更改远程 Linux 系统的 IP 地址的原因有很多。一些常见的原因包括:

  • 遵守网络策略:许多组织都有策略要求其网络上的所有设备都具有特定的 IP 地址范围。如果远程 Linux 系统不符合这些策略,您可能需要更改其 IP 地址。
  • 解决网络问题:如果远程 Linux 系统出现网络问题,更改其 IP 地址有时可以帮助解决问题。
  • 将系统迁移到新网络:如果您要将远程 Linux 系统迁移到新网络,则需要更改其 IP 地址以匹配新网络的地址范围。
  • 提高安全性:更改远程 Linux 系统的 IP 地址可以使攻击者更难找到并瞄准它。

无论出于何种原因,如果您发现自己需要更改远程 Linux 系统的 IP 地址,可以使用 nmcli 命令轻松完成。

使用 nmcli 命令为远程 Linux 系统分配 IP 地址

您可能已经知道,我们可以使用SSH在远程Linux系统上运行命令,使我们更轻松高效、灵活地管理远程Linux系统。

在使用 nmcli 分配远程 Linux 系统的 IP 地址之前,我们首先需要找到该系统的网络接口。为此,请运行:

ssh ostechnix@192.168.1.40 'nmcli con show'

将用户名和 IP 地址替换为您自己的。

示例输出:

NAME                UUID                                  TYPE      DEVICE 
Wired connection 1  60e8eaf3-89f9-3e9f-9919-1944e7abee20  ethernet  ens18  

正如您在上面的输出中看到的,网络连接名称是“有线连接 1”。

现在,让我们使用命令更改 IP 地址:

ssh -t ostechnix@192.168.1.40 "sudo nmcli con modify 'Wired connection 1' ipv4.address 192.168.1.50/24"

这里,ssh 的 -t 标志强制它分配一个伪终端,这允许 sudo 提示输入密码。当您运行此命令时,ssh 应提示您输入远程用户的密码(如果需要),然后 sudo 将提示您输入远程计算机上的密码。换句话说,系统将提示您输入远程用户的密码两次。

这是上述命令的完整分解。

  • ssh:这是 Secure Shell 命令,用于建立与远程计算机的安全连接。
  • -t:此选项强制伪终端分配。此处使用它来确保在远程端分配终端,这允许 sudo 在需要时提示输入密码。
  • ostechnix@192.168.1.40:这指定您要连接的远程用户和主机。将 ostechnix 替换为实际用户名,将 192.168.1.40 替换为远程系统的 IP 地址。
  • “sudo nmcli conmodify 'Wired connection 1' ipv4.address 192.168.1.50/24”:这是建立 SSH 连接后在远程计算机上执行的命令。

    • sudo:以超级用户(或其他用户)身份运行以下命令,假设用户具有必要的权限。
    • nmcli:NetworkManager 命令行界面,用于控制 NetworkManager(它是许多 Linux 发行版上管理网络设置的守护进程)的工具。
    • conmodify:该选项用于修改特定网络连接的设置。
    • '有线连接1':您要修改的网络连接的名称。它用单引号括起来,以处理连接名称中的空格。
    • ipv4.address 192.168.1.50/24:将网络接口的 IPv4 地址设置为 192.168.1.50,子网掩码为 255.255.255.0 (以 CIDR 表示法中的 /24 表示)。

就是这样。已分配新的 IP 地址。让我们使用命令来验证它:

ssh ostechnix@192.168.1.40 "ip addr show ens18"

将用户名、IP 地址和网卡名称 (ens18) 替换为您自己的。您将看到新的 IP 已分配。

示例输出:

2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 6e:26:0b:8e:33:8c brd ff:ff:ff:ff:ff:ff
    altname enp0s18
    inet 192.168.1.40/24 brd 192.168.1.255 scope global noprefixroute ens18
       valid_lft forever preferred_lft forever
    inet 192.168.1.50/24 brd 192.168.1.255 scope global secondary noprefixroute ens18
       valid_lft forever preferred_lft forever
    inet6 fe80::bfcf:b9d3:60de:af1b/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

使用 nmcli 命令通过 SSH 将 IP 地址分配给远程 Linux 系统

这样您就可以使用 nmcli 命令通过 SSH 将多个 IP 地址添加到远程 Linux。

正如我已经说过的,此方法将添加一个额外的 IP。现有的旧IP 地址将保持不变。

您还可以使用 -S 选项来传递 sudo 密码。它允许 sudo 从标准输入读取密码。您可以回显密码并将其通过管道传输到 ssh,但请注意此方法不安全,因为密码可能在进程列表或 shell 历史记录中可见。

echo 'yourpassword' | ssh -t user@ip "sudo -S nmcli con modify YourConnectionName ipv4.address YourIPAddress"

我再次警告您,这种方法并不安全,因为您的密码可能会暴露给本地计算机上或通过网络传输的其他用户。

使用 nmcli 通过 SSH 将 IP 地址分配给远程 Linux 系统的 Bash 脚本

我们创建了一个名为 nmcli_remote_ip_changer 的简单 Bash 脚本,通过 SSH 使用 nmcli 命令为远程 Linux 系统分配新的 IP 地址。

该脚本非常简单,基本上执行以下操作:

  • 提示您输入远程用户名和 IP,
  • 建立 SSH 连接,
  • 获取并显示远程计算机上的网络连接,
  • 提示您选择要修改的连接并要求新的 IP 配置,
  • 在远程会话中使用 sudo 来应用更改并重新启动 NetworkManager。

它托管在 Ostechnix GitHub 存储库中。您可以根据您的要求下载并修改它。

如果您想使用此脚本向远程 Linux 系统添加新的 IP 地址,请按照以下步骤操作:

1。 Git 克隆脚本:

git clone https://gist.github.com/ostechnix/2c053aba072c3f201f32c22b60cdf9a6 nmcli_remote_ip_changer

这会将脚本克隆到当前目录中名为 nmcli_remote_ip_changer 的目录中。

2。 cd 进入目录并使用命令使脚本可执行:

cd nmcli_remote_ip_changer/
chmod +x nmcli_remote_ip_changer.sh

3。使用命令运行脚本:

./nmcli_remote_ip_changer.sh

系统将提示您输入远程系统的用户名、当前 IP 地址、新 IP 地址、网关和 DNS 等。提供所有必需的详细信息后,输入远程 Linux 系统的 sudo 密码。

Enter the remote username: ostechnix
Enter the remote host IP address: 192.168.1.40
Fetching list of network connections from the remote system...
ostechnix@192.168.1.40's password: 
NAME                UUID                                  TYPE      DEVICE 
Wired connection 1  60e8eaf3-89f9-3e9f-9919-1944e7abee20  ethernet  ens18  

Enter the NAME of the connection you want to modify: Wired connection 1
Enter the new IP address (in CIDR format, e.g., 192.168.1.10/24): 192.168.1.50/24
Enter the new Gateway (leave empty if unchanged): 192.168.1.101
Enter the new DNS (leave empty if unchanged, space separated for multiple): 8.8.8.8,8.8.4.4
ostechnix@192.168.1.40's password: 
Applying the new IP address...
[sudo] password for ostechnix: 
IP address applied successfully.
Restarting NetworkManager to apply changes...
NetworkManager restarted successfully.
Please verify the connectivity to the remote system.
Connection to 192.168.1.40 closed.

使用 nmcli_remote_ip_changer 脚本通过 SSH 将 IP 地址分配给远程 Linux 系统

您可以通过 SSH 连接到远程系统来检查新的 IP 地址,或者从本地系统运行以下命令以通过 SSH 验证远程系统的 IP:

ssh ostechnix@192.168.1.40 'ip addr show ens18'

注意:如果您不想输入远程用户密码,可以配置基于 SSH 密钥的身份验证

结论

如您所见,修改远程 Linux 系统的 IP 地址是一个简单的过程。 nmcli 命令显着简化了此任务。

无论您喜欢直接执行 nmcli 命令还是将它们合并到脚本中,您都可以轻松完成此任务。