我在家里安装了两个 Ubuntu 18.04 和 20.x,并尝试在它们之间进行 ssh,我可以通过内部 IP 连接,但不能通过主机名设置连接:
机器A:192.xx115
机器B:192.xx125
两个安装都运行了 ssh,并且我可以使用内部 IP 正常连接。
从机器 BI 想要使用主机名或 hostname.ddns.net 连接到机器 A
以下是我已设置的内容:
机器 A:
机器A> /etc/hosts
127.0.0.1 machineA.ddns.net machineA
192.x.x.115 machineA
机器A> /etc/主机名
machineA.ddns.net
机器A> /etc/resolv.conf
nameserver 127.0.0.53
options edns0 trust-ad
search hsd1.xx.isp.net
机器B:
machineB> #即machineA成功ssh [email protected]
机器B> ssh -vvv[电子邮件保护] 给出
Connecting to machineA.ddns.net [ISP assigned address] port 22.
ssh: connect to host machineA.ddns.net port 22: Connection timed out
机器B> ssh -vvv 用户@机器A
ssh: Could not resolve hostname machineA: Name or service not known
SSH_from_external_to_machineA 成功
远程控制[电子邮件保护] # 成功
在机器A上尝试的命令:
机器A>sudo service ssh status # gives active(running)
机器A>sudo netstat -alnp | grep :22 # shows :22 with LISTEN
机器A>sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT
我觉得 ISP 没有阻止 ssh,因为我可以使用 machineA.ddns.net 从外部连接
因为我可以使用 IP 连接,所以路由器允许端口 22。
我觉得主机名没有正确解析,请检查并让我知道是否遗漏了任何其他步骤。
谢谢,
其他编辑:
machineB> ping machineA_Hostname
成功
machineB> nslookup machineA.ddns.net
按照预期显示外部 IP
machineB> ssh machineA
# 无法解析主机名:名称或服务未知
machineB> ssh machineA.ddns.net
尝试连接到 ping 报告的确切外部 IP 和“连接超时”
答案1
为了避免对内部 IP 地址进行硬编码,请在 Ubuntu 上设置 avahi-daemon,以便您可以ubuntu.local
从主机操作系统访问主机名。
sudo apt-get install avahi-daemon avahi-discover avahi-utils libnss-mdns mdns-scan
答案2
你想要 ssh机器_B从机器_A通过主机名, 正确的?
因此只需将 machine_B 的内部 IP 与所需名称(用于调用 machine_B)一起放入 machine_A 中即可
为了做到这一点,只需编辑machine_A的/etc/hosts并添加如下内容:
192.168.222.1 my_lovely_machine_B
现在如果你输入:
ssh user@my_lovely_machine_B
那应该可行!
但如果您不想费心对内部 IP 地址进行硬编码并每次进行更改(因为 IP 地址可能会更改),您可以做两件事。
第一种方法:这种方法虽然困难,但很实用:您需要运行 DNS 服务(例如 BIND)才能获得所需的信息
第二种方法:简单但并不适合所有情况(对你来说还可以):编写一个 bash 脚本自动为 machine_B 设置静态 IP,并让它在每次启动时运行。这样,你就不需要担心 IP 变化,你的 machine_B 总是有相同的 IP。