Hetzner ARM 伺服器

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中创建密钥

伺服器SSH密钥示例(由Termius创建)

#创建 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创建好SSH密钥

将伺服器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

伺服器A已成功在内网连接伺服器B

实验2

预先设置条件

本地网络有公网 IP 地址,伺服器 A 有公网地址,伺服器 C 无公网地址,伺服器 A, C 同时处于同一内网中

   +--------------------------+           +--------------------------+
   |      本地设备 (用户)      |           |        伺服器 A         |
   |                          |           |                          |
   |        公共网络 ⇨--------|-----------|--------⇨ 公用网络         |
   |                          |           |         专用网络          |
   +--------------------------+           +--------------------------+
                                             ⇧
                                             |
                                             |
                                         专用网络
                                             |
                                             ⇩
                                    +--------------------------+
                                    |        伺服器 C         |
                                    |                          |
                                    |        专用网络          |
                                    |                          |
                                    +--------------------------+

将实验1中伺服器A的公钥添加到Hetzner Console中

在创建新伺服器C 时将公钥添加到伺服器C

执行实验

伺服器A通过内网SSH连接到伺服器C

伺服器A已成功在内网连接伺服器C

实验3

使用 Termius 的 host chain,这对管理集群有一定的帮助

新建组,设置组中所有主机通过堡垒机伺服器 A 进行连接,注意公钥统一

Termius新建组

成功访问处于同一内网网络下的伺服器C

参考资料

Creating a Server - Hetzner Docs

Setting up an SSH key | Hetzner Community

Host Chaining – Support Portal (termius.com)

Referral Link

通过此链接以注册你的 Hetzner 账号来试试吧

Hetzner Cloud

最后修改:2023 年 09 月 02 日
如果觉得我的文章对你有用,请随意赞赏