远程访问和管理服务器不仅仅是一种方便;这是必要的。有了Docker这样的容器化技术,这一过程变得更加精简和可访问。
我们的全面指南将向您展示如何利用Docker的强大功能来设置基于web的安全Shell(SSH)访问。按照我们的分步说明,您将学习如何将标准web浏览器转换为功能齐全的终端控制台。
在本指南结束时,您将拥有一个强大的基于web的终端,使您能够在浏览器的舒适环境中执行命令、管理文件和轻松维护服务器。所以,让我们深入了解并释放基于web的SSH的潜力!
先决条件
部署基于容器的SSH需要安装Docker和Docker Compose。因此,如果您还没有安装Docker,以下任何指南都会有所帮助:
- 如何在Ubuntu 22.04上安装Docker
- 如何在Debian 12上安装Docker(牛眼)
- 如何在AlmaLinux/Rocky Linux上安装Docker
- 如何在Fedora上安装Docker
- 如何在Linux Mint 21上安装Docker
- 如何在Raspberry Pi上安装Docker
另一个重要组件是Docker Compose。请记住,它是与Docker分开提供的。因此,必须安装Docker才能使用Docker Compose;否则,Compose将不起作用。
幸运的是,安装它非常简单,即使它还没有在您的Linux系统上。要安装Docker Compose,请键入以下两个命令:
苏多卷曲-L
"https://github.com/docker/compose/releases/latest/download/docker-compose-linux-$(uname-m)“
-o/usr/local/bin/docker compose
sudo-chmod+x/usr/local/bin/docker compose
代码语言:
JavaScript
(
javascript
)
我们的Dockerized堆栈包括什么?
要安装基于web的SSH,允许您将浏览器用作SSH终端,我们将使用三个独立的容器——Caddy、Wetty和OpenSSH,我们将通过Docker Compose将它们一起部署。
以下是我们基于web的SSH堆栈中的不同组件如何交互的图形表示。
Caddy:反向代理
Caddy是一款多功能、简单且快速的web服务器,以其自动获取和续订Let’s Encrypt SSL证书的能力而闻名,是我们基于web的SSH部署的理想候选者。
在我们的案例中,Caddy将充当反向代理服务器,坐在Wetty容器前面,转发请求并传递客户端响应。此外,它将为我们提供一个安全的HTTPS连接,以及对我们基于web的SSH实现的用户名和密码保护访问。
WeTTY:基于HTTP和HTTPS的终端
WeTTY(Web+TTY的缩写)是一个通过HTTP和HTTPS运行的终端模拟器软件。它本质上是一个基于web的界面,允许用户通过web浏览器访问命令行界面。
换言之,它在网络浏览器中提供了一个终端,使其可以从任何具有互联网访问权限的机器上轻松访问,而无需安装额外的软件。
OpenSSH:SSH服务器
我们讨论的SSH服务器是WeTTY容器连接到的服务器。但这里有一个关键点需要理解。WeTTY和OpenSSH容器都不会直接链接到我们设置基于web的SSH的主机服务器。
因此,重要的是不要将其视为只允许您访问安装它的特定服务器的解决方案。
相反,把它想象成一个跳跃主机。这意味着OpenSSH容器充当了一个中间人。通过它,您可以建立到主机服务器和任何其他远程SSH服务器的SSH连接。
使用Docker Compose实现基于Web的SSH
第一步是创建将放置Docker Compose部署文件的文件夹。然后切换到它;从现在开始,您需要从该位置进一步执行本指南中的所有命令。
mkdir websh
cd websh
此外,在一开始,我们就澄清了我们的安装将使用“
ssh.mplinux.com
“作为可访问服务的域名,Caddy将自动为其颁发有效的SSL证书。
当然,您需要将此名称替换为您拥有并在以下配置中使用的名称。
创建Docker网络
作为第一步,让我们创建我们的Docker网络并命名它“
websh_network
.”
docker网络创建websh_network
通过这样做,我们可以确保部署中的所有容器彼此具有直接可见性,以便它们可以进行交互。同时,基于web的SSH堆栈将在其网络中与我们主机上的其他Docker容器隔离,这增加了一层安全性。
球童
如上所述,Caddy将充当WeTTY容器前面的反向代理。其服务部分来自我们的“
docker-compose.yaml
“文件在下面。请不要复制它;该文件的最终和完整版本可以在本指南中进一步查看。
我们在这里展示它只是为了解释它是如何工作的,这也适用于以下容器化服务的所有片段(WeTTY和OpenSSH)。
球童
图片:lucaslorentz/caddy docker代理:ci alpine
container_name:反向代理
端口:
-
80
:
80
-
443
:
443
环境
-CADDY_INGRESS_network=网络
网络:
-websh_network
卷:
- /
var
/run/doker.sock:/
var
/run/doker.sock
-caddy_data:/data
重新启动:除非停止
代码语言:
PHP
(
php
)
Caddy是我们的码头化部署中唯一一个公开端口(80和443)的容器,允许通过浏览器直接从外部世界访问基于web的SSH安装。
我们堆栈中的所有其他容器都不暴露端口;相反,它们通过隔离的“
websh_network
“我们之前定义的Docker网络。
因为Caddy需要扫描Docker元数据,寻找指示它应该为特定容器服务的标签(此处有更多信息),所以我们将Docker套接字与容器的套接字一起安装在主机上。
在找到标签后,它会在内存中生成一个“
Caddyfile
“(一个主要的Caddy网络服务器配置文件),其站点条目和代理通过其DNS名称或容器IP地址指向Docker服务。
最后,我们还通过创建一个命名的Docker卷来确保数据的持久性。”
caddy_data
。”这一点很重要:Docker容器不会永久保存数据,它们本质上是临时的。
因此,当您启动Caddy时,它会与Let’s Encrypt联系,为您选择的域获取SSL证书。使用一个命名的Docker卷(一种确保数据持久性的方法),您可以确保每次重新启动Caddy容器时该证书不会丢失。
韦蒂
WeTTY是我们部署的核心——它是一块拼图,可以让您直接在web浏览器中使用SSH终端,使您可以轻松地从任何有互联网连接的计算机访问。
潮湿的:
图片:wettyos/wetty
容器名称:潮湿
标签:
caddy:ssh.tmpinux.com
caddy.basicauth:/*
caddy.basicauth.bobby:JDJhJDE0JDd3S3lscDY2aDFKSzU5clIunFPiTnVNHJhR1EvUnhuUklTU01Nk5OVW94N3VXOHg4RTRH
caddy.reverse_oxy:“{{upstreams 3000}}”
环境
-SSHHOST=ssh服务器
-SSHPORT=2222
-SSHUSER=术语
网络:
-websh_network
重新启动:除非停止
依赖于:
-ssh服务器
在这里,我们将之前讨论的所有标签设置在“
标签
部分这对于Caddy在与WeTTY容器交互时有效地执行其反向代理角色是必要的。
当然,在“
docker-compose.yaml
文件(如下所示),不要忘记替换行(
caddy:ssh.tmpinux.com
“)与您的实际域名。
我们现在需要做一些工作。下面的行允许我们使用用户名和密码保护基于web的SSH访问。我们选择了“
警察
“作为用户名,密码采用安全的哈希形式。
球童
.basicauth
.波比
:
JDJhJDE0JDd3S3lscDY2aDFKSzU5clIuNFBiTnVNHJhR1EvUnhuUklTU01Nk5OVW94N3VXOHg4RTRH
代码语言:
CSS
(
css
)
以下是设置密码的简单方法,例如,“
mypassword
。”只需运行下面的命令。它将下载并运行一个临时Caddy容器。然后
散列密码
命令将散列您在“”之后提供的字符串
–纯文本
选项
docker run--rm caddy caddy散列密码--明文mypassword
最后,获取输出并将其解码为base64位编码。
回响
n
'$2a$14$OkAZQQXYqWyH4QXeyScoi。XVOsyGgNAwlf7rC3OgtxkVvWGzS4rde'
|base64
代码语言:
PHP
(
php
)
包含“”的哈希版本的最后一个字符串
mypassword
”现在可以使用了。对于用户部分,您可以选择任何您喜欢的名称,例如“j
ohn
。”以下是最终版本的样子:
球童
.basicauth
.约翰
:
JDJhJDE0JE9rQVpRUVhZcVd5SRRWGV5U2NvaS5YVk9zeUdnTkF3bGY3ckMzT24.1.1.GtWdldHelM0cmRl
代码语言:
CSS
(
css
)
WeTTY代码段的其余部分指定了默认端口3000,WeTTY在该端口上运行,Caddy应连接到该端口。在“
环境
部件,使用
SSHHOST
和
SSHPORT
“指令,我们指定服务的名称,”
ssh服务器
,“和端口”
2222
“SSH服务器容器正在其上运行,如下所述。
此外,“SSHUSER”指定默认用户,“
学期
,”WeTTY容器将用来连接到SSH容器。
SSH服务器
我们来到了基于web的SSH部署中的最后一个容器,SSH服务器。
ssh服务器:
图片:lscr.io/linuxserver/openssh-server
container_name:ssh服务器
主机名:ssh服务器
环境
-PUID=
1000
-PGID=
1000
-密码访问=
真的
-USER_NAME=术语
-USER_PASSWORD=术语
网络:
-websh_network
卷:
- ./config:/config
重新启动:除非停止
代码语言:
PHP
(
php
)
这里需要注意的是用户名(“
学期
“)和密码(”
学期
“)通过”
用户名
和
用户密码
”选项。换句话说,SSH容器将在初始化时通过分配指定的密码来创建此用户。
此外,我们将容器的“
配置
“目录到”
配置
“一个在我们的主机系统上,它将在目录窗体中自动创建,我们将运行
码头工人组成
命令,确保日志文件、SSH密钥等数据的持久性。
Docker Compose文件
现在,让我们将之前的所有部分组装到基于web的SSH dockerized应用程序的最终版本中。首先,创建一个“
docker-compose.yaml
”文件并粘贴以下内容。
纳米技术
码头工人组成
.yaml
代码语言:
CSS
(
css
)
版本
"3.8"
服务:
球童
图片:lucaslorentz/caddy docker代理:ci alpine
container_name:反向代理
端口:
-
80
:
80
-
443
:
443
环境
-CADDY_INGRESS_network=网络
网络:
-websh_network
卷:
- /
var
/run/doker.sock:/
var
/run/doker.sock
-caddy_data:/data
重新启动:除非停止
潮湿的:
图片:wettyos/wetty
容器名称:潮湿
标签:
caddy:ssh.tmpinux.com
caddy.basicauth:
/*
caddy.basicauth.bobby:JDJhJDE0JDd3S3lscDY2aDFKSzU5clIunFPiTnVNHJhR1EvUnhuUklTU01Nk5OVW94N3VXOHg4RTRH
caddy.reverse_oxy:“{{upstreams 3000}}”
环境
-SSHHOST=ssh服务器
-SSHPORT=2222
-SSHUSER=术语
网络:
-websh_network
重新启动:除非停止
依赖于:
-ssh服务器
ssh服务器:
图片:lscr.io/linuxserver/openssh-server
container_name:ssh服务器
主机名:ssh服务器
环境
-PUID=1000
-PGID=1000
-PASSWORD_ACCESS=真
-USER_NAME=术语
-USER_PASSWORD=术语
网络:
-websh_network
卷:
- ./config:/config
重新启动:除非停止
卷:
caddy_data:{}
网络:
websh_network:
外部:true
代码语言:
PHP
(
php
)
请记住在上述部署中调整以下内容:
- 潮湿>标签>球童
代替
ssh.mplinux.com
“使用您正在使用的域。
- wetty>标签>caddy.basicauth.bobby
改变
警察
”设置为您喜欢的任何用户名,并使用您创建的密码,如手册前面所述。
此外,我们还建议在“
ssh服务器
“部分替换中的默认用户名和密码”
用户名
和
用户密码
“设置,当前为”
学期
和
学期
,”与您喜欢的不同。此外,请记住使用您为“
SSHUSER
“在”
潮湿的
”部分。
使用Docker Compose部署基于Web的SSH
最后,我们可以使用Docker Compose运行我们的基于web的Docker化SSH堆栈。要执行此操作,请从“
websh
“我们创建的目录”
docker-compose.yaml
文件
在后台部署和运行容器:
docker组合-d
Docker镜像将开始下载。整个过程可能需要几秒钟到几分钟,具体取决于您的互联网连接速度。
最后,您应该会看到一个类似于下面的屏幕,通知您已成功部署并正在运行基于码头的SSH安装。
容器启动的最初延迟将是第一次,因为Docker必须从互联网上下载图像。在那之后,所有后续的运行都将花费几秒钟的时间,因为它们将在您的Linux系统上本地可用。
通过Web浏览器登录到基于Web的SSH
打开web浏览器并将其指向“
https://your-domain-name/wetty
“地址,在我们的情况下,是”
https://ssh.tmplinux.com/wetty
.”将弹出一个窗口,询问您的用户名和密码。请使用您在中设置的
docker-compose.yaml
文件
成功登录后,WeTTY将提示您键入在OpenSSH(“ssh服务器”)容器中设置的默认用户的密码。只要输入密码,你就可以出发了!
现在,您的浏览器变成了SSH控制台,允许您远程连接到其他SSH服务器。有了这个设置,你只需要一个互联网连接和一个网络浏览器就可以在任何地方管理你的服务器。
结论
使用Docker Compose设置基于web的SSH可以有效地将浏览器转换为终端控制台。按照我们文章中概述的步骤,您可以直接从web浏览器快速安全地访问远程服务器。
所以,继续尝试吧,尽情享受它给你的数字生活带来的便利和效率。谢谢你抽出时间!欢迎在下面的评论中分享您的经历或提出问题。
在首次引入 Windows 大约 41 年后,记事本终于更新了自动更正和拼写检查功能。这家科技巨头于今年 3 月推出了拼...
大鱼 2024 年 7 月 9 日
在Ubuntu及其他基于Debian的Linux发行版中,软件包管理是系统维护的一个重要方面。apt和apt-get是两...
大鱼 2024 年 6 月 26 日
远程桌面是一种允许您远程接管和使用另一台计算机的服务。在Ubuntu中,可以在图形客户端机器上启用它来控制主机。此功能对...
大鱼 2024 年 5 月 7 日
利用当天的视频 苹果2024年5月的“放开”活动标志着iPad系列的一个重要里程碑,该公司推出了自成立以来最重大的升级。...
大鱼 2024 年 5 月 19 日
已升级到新iPhone,是否要从旧设备中移动所有照片?或者你只是想从别人的iPhone上转移照片?以下是在两部iPhon...
大鱼 2024 年 5 月 19 日