因此,我正在为我和学校的其他极客建立一个实验网络,用于网站测试和服务器练习。我是系统和网络管理员(但实际上只是为了玩雷神之锤)。
在家里摆弄它时,我发现必须将整个 IP 地址输入到 SSH 到主机(在本例中为 Raspberry Pi)中,这很乏味。我当前的主机名是hyperfang
。相反pi@longip
,我怎样才能做到这一点pi@hyperfang
?我的路由器上有静态 DNS 的设置。我是否必须在我的网络上建立一个 DNS 服务器才能使其工作?
我的网络是无线的,笔记本电脑将连接到该网络。我没有笔记本电脑的根访问权限,但我有一个 Raspberry Pi 供用户通过 登录ssh
。我想要的是当任何人加入网络并想要登录我的 Pi 时,他们可以使用pi@hyperfang
.我不是在寻找主机文件配置解决方案,而是在寻找其他类似本地域的解决方案。
我已经avahi
在我的 Pi 上运行了,但它不起作用。
笔记:该网络未连接到互联网,它是一个纯粹的本地网络。
答案1
您可以ssh
使用 进入 Pi [email protected]
。hostname.local
在大多数需要使用 IP 地址的地方都可以使用,但也有一些例外,例如rsync
。
这假设正在avahi
运行,这应该是最近安装的情况Raspbian
答案2
有几种不同的选择,具体取决于您想要投入多少时间、您的技术能力以及您希望系统的灵活性。
对于小型混合网络或非 Windows 网络,我建议在每台计算机上使用主机文件。对于完全基于 Windows 的网络(根据您的帖子和该站点的名称,显然您没有),您通常可以依靠 netbios 来“查找”网络上的其他 Windows 计算机,除其他外还提供主机名查找功能。
主机文件位于 Linux 计算机上的 /etc/hosts 中,是一个将 IP 地址映射到主机名的简单列表。如果您有固定的 IP 地址,并且需要分配主机名和 IP 地址的计算机数量相对较少,那么这就是正确的方法。
这是我在这台机器上的主机文件的副本;其中不多,因为我使用本地 dns 服务器(dnsmasq)。
#
# /etc/hosts: static lookup table for host names
#
#<ip-address> <hostname.domain.org> <hostname>
127.0.0.1 localhost.localdomain localhost
::1 localhost.localdomain localhost
192.168.1.2 lenny
# End of file
只需为您拥有的每个 IP 地址/主机名对在此文件中添加一个新行即可。本地主机地址、ipv6 和 ipv4 必须保留在文件中 - 如果没有这些地址,事情通常会变得非常糟糕。
填充此列表后,您需要将其分发到 LAN 上的每台计算机。完成后,您可以通过主机名而不是 IP 地址来引用每台计算机。您还可以为给定的 IP 地址指定多个主机名/别名;例如
192.168.1.2 lenny lennon lemon
然后,您可以从远程计算机使用这些名称中的任何一个连接到该计算机(如果安装了修改后的主机文件)。
Windows 机器也有一个主机文件,埋藏在系统深处一点,通常位于:
C:\Windows\System32\drivers\etc\hosts
它使用与 Linux 版本相同的语法。这是有关此内容的更多信息的链接方法。
如果您有专用服务器并想要配置自己的本地 dns,您可以使用两个主要程序 -域名解析和绑定。由于这个局域网甚至没有连接到互联网,我认为这两者都太过分了,但它们都是选择。 dnsmasq 往往更容易配置,但功能不太齐全。正确配置后,bind 可以支持企业级基础设施。
更新
你绝对可以使用树莓派作为本地dns服务器;这并不罕见。以下是一些可以帮助您入门的链接:
Linux 杂志 博客.grobinson.net 马克威尔逊.it
我担心的是该网络上的客户端当前是如何配置的以及您是否能够修改它。如果客户端全部配置为 DHCP,并且您拥有完全访问权限的路由器当前正在担任该角色,那么您就已准备就绪。您只需将路由器的 dns 服务器设置为树莓派的固定(非 DHCP)地址即可。如果您将路由器配置为使用保留 DHCP 发布的 IP 地址作为 pi 的 MAC 地址,则可以使用 DHCP - 几乎所有路由器都允许该配置。
完成后,请按照以下说明在 pi 上配置 dns。
有些路由器内置了附加功能 - 您应该研究一下 - 在某些情况下,它们会创建自定义域(例如 .local 或 .lan)并将所有 dhcp 客户端添加到其中;允许通过主机名进行 LAN 通信。其他文件具有与主机文件类似的功能(甚至拥有主机文件)。在深入研究 dnsmasq 之前我会快速浏览一下。
答案3
如果您只需要自己系统上可用的别名,则不需要涉及 DNS 服务器或路由器。您可以简单地在两个位置之一创建别名,具体取决于您想要如何使用它。
仅 SSH 别名
如果您只想通过 SSH 连接到 hyperfang,您可以创建一个 SSH 配置文件,其中包含一些有效缩短 SSH 命令的信息。例如。
验证 ~/.ssh/config 是否存在。如果它不存在,只需创建它
touch ~/.ssh/config
。编辑 SSH 配置文件如下:
Host hyperfang HostName <longassip> User pi
使用 启动 SSH 连接
ssh hyperfang
。
系统范围别名(即所有网络操作,而不仅仅是 SSH)
如果您希望能够 ping、telnet、wget、curl 等到 hyperfang,您需要比 SSH 配置文件更明显的东西。在这种情况下,主机文件将起作用。您将需要 root 凭据或 sudo 权限才能进行此更改。
编辑
/etc/hosts
以附加以下行:<longassip> hyperfang
使用以下命令启动 SSH 连接
ssh pi@hyperfang
笔记:
如果您希望网络上的每个人都能够使用 hyperfang 作为 的别名,那么这些解决方案不适合您,并且您需要 DNS 服务器。在这种情况下,请按照路由器的说明进行设置,或者在网络中设置 DNS 服务器。
答案4
静态 IP 和“主机”文件
将设备的 IP 设置为静态IP并将该 IP 和主机名添加到您的/etc/hosts
文件中。例如,
192.168.100.22 hyperfang.localnet.lan hyperfang
SSH 配置文件
此外,正如另一个答案中指出的那样,添加 SSH 配置文件/选项将允许您指定不同的项目;例如用户、端口等。
$ cat ~/.ssh/config
Host 192.168.100.22
User pi
脚本
创建一个简单的脚本或alias
调用该函数。显然,如果其他人也想使用它来促进此过程,那么脚本就是最佳选择;因为它alias
对于您的系统和/或用户来说是本地的。
alias sspi='ssh [email protected]'
对于一个可以在必要时分发的脚本,这是一个非常简单的尝试:
#!/bin/bash
# Optional Message
echo 'This script is about to connect to...'
# Prompt for confirmation
read -p "Are you sure? " -n 1 -r
echo # (optional) move to a new line
if [[ ! $REPLY =~ ^[Yy]$ ]]
then
exit 1
fi
xterm -e ssh [email protected]