从源码安装 SSH
1.构建基础镜像
在当期目录下(与Dockerfile
同目录),添加sources.list
文件,并添加镜像源:
1 | # Ubuntu sources have moved to the /etc/apt/sources.list.d/ubuntu.sources |
Dockerfile
编写:
1 | FROM ubuntu |
根据自己实际情况设置代理环境(ENV
)。
然后开始构建镜像:
1 | docker build -t ubuntu:openssh . |
2.创建容器
运行一个容器实例:
1 | docker run -it --name=ssh ubuntu:openssh |
3.从源码安装 SSH
要从源码安装和升级 OpenSSH,在 Ubuntu 上可以按照以下步骤操作:
3.1 准备环境
首先,确保系统中安装了编译 OpenSSH 所需的依赖包。
1 | sudo apt update |
3.2 下载 OpenSSH 源码
从官方 OpenSSH 网站下载最新的源码压缩包:
1 | wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-X.XX.tar.gz |
将 X.XX
替换为最新版本的版本号,可以在 OpenSSH 官网 查询最新版本。
解压缩下载的文件:
1 | tar -xzf openssh-X.XX.tar.gz先设置下容器的`root`账户的 |
3.3 配置 OpenSSH
在编译 OpenSSH 之前,使用 configure
脚本来生成 Makefile。可以根据你的系统环境和需求指定一些配置选项:
1 | ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-ssl-engine |
常用的选项包括:
--prefix=/usr
: 将安装路径设置为/usr
而不是默认的/usr/local
。--sysconfdir=/etc/ssh
: 指定配置文件目录为/etc/ssh
。--with-pam
: 启用 PAM(可插拔认证模块)。--with-ssl-engine
: 使用 OpenSSL 的 SSL 引擎。
你可以使用 ./configure --help
来查看所有可用的配置选项。
3.4 编译 OpenSSH
配置完成后,编译源码:
1 | make |
编译完成后,可以通过 make tests
运行测试,以确保 OpenSSH 正确构建。
3.5 安装 OpenSSH
在编译成功并通过测试后,使用 make install
来安装 OpenSSH。
1 | sudo make install |
这个命令将会把编译好的文件安装到系统中。
执行时可能会出现这种错误:
1 | Privilege separation user sshd does not exist |
该错误与sshd
用户的缺失有关,这是 OpenSSH 用于权限隔离的一个功能。没有这个用户,SSH 守护进程可能无法正常启动。
解决办法:
创建
sshd
用户:1
sudo useradd -r -d /var/empty -s /usr/sbin/nologin sshd
验证配置:
1
sudo /usr/sbin/sshd -t -f /etc/ssh/sshd_config
如果没有输出或错误,说明配置文件是正确的。
3.6 配置 OpenSSH
安装完成后,检查 OpenSSH 的配置文件 /etc/ssh/sshd_config
。
找到以下配置项,并确保它们没有被注释掉(前面没有#
)并且值设置正确:
1 | PasswordAuthentication yes |
记得设置容器中root
用户的密码:
1 | passwd |
升级或重新安装可能会覆盖某些配置,因此你可能需要备份原有的配置文件并重新应用它们:
1 | sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup |
编辑新的配置文件:
1 | sudo nano /etc/ssh/sshd_config |
3.7 重启 SSH 服务
安装完成后,需要重新启动 SSH 服务来应用新版本:
1 | sudo systemctl restart ssh |
你可以通过以下命令确认 SSH 版本是否更新:
1 | ssh -V |
环境中可能没有systemctl
,先检查下是否有service
:
1 | which service |
可以用service
来控制:
1 | sudo service ssh status |
1 | sudo service ssh start |
如果service
不可用,可以直接运行sshd
来启动:
1 | which sshd |
运行:
1 | /usr/sbin/sshd |
8. 防止自动更新覆盖
默认情况下,Ubuntu 使用 apt
来自动管理和更新软件包。如果你不希望 OpenSSH 通过 apt
更新被覆盖,可以将其锁定:
1 | sudo apt-mark hold openssh-server openssh-client |
这样可以确保 apt
不会自动更新 OpenSSH。
3.9 验证安装
最后,确保 OpenSSH 正常运行。通过以下命令验证 SSH 是否正在监听:
1 | sudo systemctl status ssh |
没有systemctl
的话,可以用:
1 | ps aux | grep sshd |
输出是这样表示启动成功:
1 | root 10106 0.0 0.0 8784 4508 ? Ss 06:28 0:00 sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups |
3.8 连接
在宿主机中测试:
1 | ssh root@<container_IP> |
- Title: 从源码安装 SSH
- Author: loskyertt
- Created at : 2024-09-11 11:24:33
- Updated at : 2024-11-13 03:07:10
- Link: https://redefine.ohevan.com/2024/09/11/从源码安装SSH/
- License: This work is licensed under CC BY-NC-SA 4.0.