安装编译依赖编译 OpenSSH 需要一套基础工具和库文件。Ubuntu 24.04 上执行:
apt-get update
apt-get install -y build-essential dpkg-dev \
libssl-dev zlib1g-dev libpam0g-dev \
libedit-dev libkrb5-dev autoconf automake安装备用 SSH 服务这是最关键的一步,很多人踩坑。编译安装过程中会卸载原有 SSH 服务,如果只依赖一个 SSH 连接,一旦出问题就会断连,服务器就失控了。安装 dropbear 作为备用 SSH 服务,监听 2222 端口:
验证两个 SSH 服务都在监听:
ss -tlnp | grep -E ”:(22|2222)”确保 2222 端口可用后再继续。万一主 SSH 挂了,还能通过 dropbear 连回来救场。

下载并解压源码 从 OpenBSD 官方 CDN 下载最新稳定版本:
cd /root
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.5p1.tar.gz
tar -xzf openssh-10.5p1.tar.gz
cd配置编译选项 配置时指定必要的功能支持。Ubuntu 24.04 的典型配置:
多核编译,速度更快:
make -j$(nproc)验证编译产物 检查生成的二进制文件:
ls -la ssh sshd sftp sftp-server sshd-session sshd-auth重要:OpenSSH 10.x 必须包含 sshd-session 和 sshd-auth,这是新架构的核心组件。旧版本没有这两个文件,很多人按老教程打包会漏掉它们,导致服务无法启动。
创建包目录结构 按照 deb 包规范创建目录:
复制二进制文件 按功能分类复制:
注意 sshd-session 和 sshd-auth 放到 /usr/libexec 目录下。 创建控制文件 deb 包的控制文件定义包信息和依赖:
创建安装后脚本 postinst 脚本在安装后执行,创建必要目录和密钥:
构建 deb 包 打包:
dpkg-deb --build $PKG_DIR /root/openssh-custom_10.5p1-1_amd64.deb
验证包内容
检查打包是否正确:
dpkg-deb -c /root/openssh-custom_10.5p1-1_amd64.deb

卸载原版并安装新包 先停掉旧服务,再卸载旧版本:
systemctl stop ssh
apt-get remove -y openssh-client openssh-server
dpkg -i /root/openssh-custom_10.5p1-1_amd64.deb安装新包后,需要手动创建 systemd 服务文件:
启动服务
systemctl daemon-reload
systemctl enable sshd
systemctl start sshd验证 检查服务状态和版本:
systemctl status sshd
ssh -V# 安装 dropbear(轻量级 SSH 服务)
apt-get install -y dropbear
# 配置 dropbear 使用备用端口 2222
mkdir -p /etc/dropbear
cat > /etc/default/dropbear << EOF
DROPBEAR_PORT=2222
DROPBEAR_EXTRA_ARGS=”-B”
EOF
# 重启 dropbear
systemctl restart dropbear
systemctl status dropbear./configure \
--prefix=/usr \
--sysconfdir=/etc/ssh \
--with-pam \
--with-kerberos5=/usr \
--with-privsep-path=/var/empty \
--with-privsep-user=sshd \
--with-md5-passwords \
--with-ssl-dir=/usr \
--with-zlib=/usr \
--with-libeditPKG_DIR=/root/openssh-pkg
rm -rf $PKG_DIR
mkdir -p $PKG_DIR/DEBIAN
mkdir -p $PKG_DIR/usr/bin
mkdir -p $PKG_DIR/usr/sbin
mkdir -p $PKG_DIR/usr/libexec
mkdir -p $PKG_DIR/etc/ssh
mkdir -p $PKG_DIR/run/sshd# 客户端工具
cp -a ssh scp sftp ssh-add ssh-agent ssh-keygen ssh-keyscan \
$PKG_DIR/usr/bin/
# 服务端
cp -a sshd $PKG_DIR/usr/sbin/
# OpenSSH 10.x 新架构组件(必须!)
cp -a sshd-session sshd-auth $PKG_DIR/usr/libexec/cat > $PKG_DIR/DEBIAN/control << 'EOF'
Package: openssh-custom
Version: 10.5p1-1
Architecture: amd64
Description: OpenSSH 10.5p1 custom build
Depends: libssl3, zlib1g, libpam0g, libkrb5-3, libedit2
Conflicts: openssh-client, openssh-server
EOFcat > $PKG_DIR/DEBIAN/postinst << 'EOF'
#!/bin/bash
set -e
id sshd >/dev/null 2>&1 || useradd -r -s /usr/sbin/nologin -d /var/empty sshd || true
mkdir -p /var/empty /run/sshd
chown root:root /var/empty
chmod 755 /var/empty
[ -f /etc/ssh/ssh_host_ed25519_key ] || ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "" || true
if [ -f /etc/ssh/sshd_config ]; then
sed -i "s|/usr/lib/openssh/sftp-server|/usr/libexec/sftp-server|g" /etc/ssh/sshd_config
sed -i "s|/usr/lib/sftp-server|/usr/libexec/sftp-server|g" /etc/ssh/sshd_config 2>/dev/null || true
fi
systemctl is-enabled sshd >/dev/null 2>&1 && systemctl restart sshd || true
exit 0
EOF
chmod 755 $PKG_DIR/DEBIAN/postinstcat > /etc/systemd/system/sshd.service << 'EOF'
[Unit]
Description=OpenBSD Secure Shell Server
After=network.target
[Service]
Type=notify
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF