Hetzner 伺服器之间组内网,实现内网通过 SSH 连接其它伺服器,至少需要两台或以上的伺服器
思路:用户(本地设备) ⇾ 伺服器 A (公网 + 专用网络) ⇾ 伺服器B (专用网络)
本次一共准备三台 ARM 伺服器,伺服器 A (10.0.0.2) 和 B (10.0.0.3) 有公网 IPv4/6 地址,伺服器 C (10.0.0.4) 无公网地址
实验1
预先设置条件
本地网络有公网 IP 地址,伺服器 A 有公网地址,伺服器 B 也有公网地址,伺服器 A, B 同时处于同一内网中
+--------------------------+ +--------------------------+
| 本地设备 (用户) | | 服务器 A |
| | | |
| 公共网络 ⇨--------|-----------|--------⇨ 公用网络 |
| | | 专用网络 |
+--------------------------+ +--------------------------+
⇧
|
|
专用网络
|
⇩
+--------------------------+
| 服务器 B |
| |
| 专用网络 |
| 公用网络 |
+--------------------------+
在 Hetzner 控制台中创建网络,IP range 默认 10.0.0.0,10.0.0.0/16
执行实验
在伺服器A中创建密钥
#创建 ed25519 密钥,当然类型可以换为 rsa, dsa, ecdsa 等,此处不讲
ssh-keygen -t ed25519
#此处得到 console 输出,要求选择保存密钥位置,此处默认不变
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519):
#接着得到如下输出,要求设置通行短语,此处可以略过不设置
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
#然后得到如下输出,说明已成功设置好密钥
Your identification has been saved in /root/.ssh/id_ed25519
Your public key has been saved in /root/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:a1UFStpVej2W1SbgGjCR+LPVBgQty5gey27PsHCvC2A root@ubuntu-8gb-fsn1-1
The key's randomart image is:
+--[ED25519 256]--+
| .=*o ++o o|
| . o*o+ o..=|
| =.o+o+ .*.|
| + = .+o.. .|
| E o oS+o. |
| . . + .o |
| o.o o |
| +o* |
| .+++ |
+----[SHA256]-----+
#查看密钥
cat ~/.ssh/id_ed25519.pub
#得到伺服器 A 的公钥输出
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMNt0ex360C/WsE9uhL0CTx/+3s2e3VwDhxOoWs6/sv3 root@ubuntu-8gb-fsn1-1
将伺服器A的公钥添加到伺服器B中
#用 sed 命令在伺服器B 中新插入一行伺服器A 的公钥,添加伺服器A的公钥到其授权密钥列表中
sed -i '$ a ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMNt0ex360C/WsE9uhL0CTx/+3s2e3VwDhxOoWs6/sv3 root@ubuntu-8gb-fsn1-1' ~/.ssh/authorized_keys
#或是通过 vim, nano 等命令手动在 authorized_keys 中插入公钥
vim ~/.ssh/authorized_keys
#检查是否添加成功
cat ~/.ssh/authorized_keys
伺服器A通过内网SSH连接伺服器B
#内网连接10.0.0.3
ssh [email protected]
#要求是否添加指纹,此处默认选择 yes
The authenticity of host '10.0.0.3 (10.0.0.3)' can't be established.
ED25519 key fingerprint is SHA256:4KTAXUbBIGxV6XfYja9LdG3GB4YVI9XSULd+/QHRRBY.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.0.3' (ED25519) to the list of known hosts.
#伺服器B中查看登录情况
who | grep 'root'
#得到输出,伺服器A (10.0.0.2) 已登录伺服器B
root pts/0 2023-07-04 00:52 (20.24.195.10)
root pts/1 2023-07-04 01:23 (10.0.0.2)
#netstat
netstat -an | grep 10.0.0.2
#得到输出
tcp 0 0 10.0.0.3:22 10.0.0.2:35968 ESTABLISHED
实验2
预先设置条件
本地网络有公网 IP 地址,伺服器 A 有公网地址,伺服器 C 无公网地址,伺服器 A, C 同时处于同一内网中
+--------------------------+ +--------------------------+
| 本地设备 (用户) | | 伺服器 A |
| | | |
| 公共网络 ⇨--------|-----------|--------⇨ 公用网络 |
| | | 专用网络 |
+--------------------------+ +--------------------------+
⇧
|
|
专用网络
|
⇩
+--------------------------+
| 伺服器 C |
| |
| 专用网络 |
| |
+--------------------------+
在创建新伺服器C 时将公钥添加到伺服器C
执行实验
伺服器A通过内网SSH连接到伺服器C
实验3
使用 Termius 的 host chain,这对管理集群有一定的帮助
新建组,设置组中所有主机通过堡垒机伺服器 A 进行连接,注意公钥统一
参考资料
Creating a Server - Hetzner Docs
Setting up an SSH key | Hetzner Community
Host Chaining – Support Portal (termius.com)
Referral Link
通过此链接以注册你的 Hetzner 账号来试试吧