在绝大多数Linux服务器上,SSH服务需要的核心包就是openssh-server,同时建议安装openssh-client用于密钥管理;具体安装命令根据系统版本选择apt或yum/dnf。
Ubuntu与CentOS的ssh服务器安装包对比
远程登录服务器时,SSH协议是最常用的通道,不同系统虽然都依赖openssh-server这个主包,但安装命令和额外依赖存在明显差异,以最常见的两种发行版为例。
Ubuntu/Debian系统安装命令
Ubuntu服务器默认可能未安装SSH服务,需要手动操作,执行以下命令前,先更新软件源缓存。
sudo apt update sudo apt install openssh-server
安装完后,系统会自动生成sshd服务,并创建/etc/ssh/sshd_config配置文件,这个包主要包含sshd服务端和运行时依赖,比如libssl库和openssh-sftp-server,多数情况下,完整安装还会自动拉起host key生成工具,不需要手动干预。
CentOS/RHEL系统的安装包差异
CentOS 7及更低版本用yum,CentOS 8以上推荐dnf,核心包名称和Ubuntu一致,但依赖的库有所区别。
# CentOS 7/RHEL 7 sudo yum install openssh-server # CentOS Stream / RHEL 9 sudo dnf install openssh-server
值得注意的是,CentOS默认已经预装了openssh-server,但有些精简版镜像可能只保留了openssh-clients,检查是否已安装,可以用rpm命令:
rpm -qa | grep openssh
输出中应当同时包含openssh-server和openssh-client,如果仅有client,则还需单独安装server包。
最小化系统需要额外补装的包
在容器或最小化安装的系统中,即使装好了openssh-server,也常因缺少hostname、passwd或net-tools导致服务启动异常或无法确定IP,行业共识认为,这些基础工具属于SSH正常运行的必要条件,建议在最简环境执行:
sudo apt install -y hostname net-tools iproute2 # Ubuntu最小版 sudo yum install -y hostname net-tools # CentOS最小版
ssh服务器安装包下载时容易遗漏的依赖项
从软件源安装一般能自动解决依赖,但有两个场景容易出问题:离线安装和源码编译。
离线环境下的依赖包组合
在没有外网的服务器上,很多人只拷贝了openssh-server的rpm或deb包,结果安装时提示依赖缺失,常见缺失项是openssl-libs和zlib,针对CentOS系统,可用createrepo工具将多个rpm包做成临时本地源,再执行yum安装,Ubuntu则建议下载全部依赖的deb包:
sudo apt install -y --download-only openssh-server
执行后,缓存目录下的deb文件需要一并拷贝到目标机器,精简文件时不要只拿主包,/var/cache/apt/archives中的libssl、libwrap等.gz包也要保留。
编译安装时需要的额外工具
如果需要从源码安装新版OpenSSH,依赖要求更严格,除了编译器gcc和make,还必须安装zlib-devel、openssl-devel和pam-devel,缺少这些包,configure阶段就会报错,详细依赖列表在官方源码包中的README文件中,实际操作时可用一句命令准备:
sudo apt install -y build-essential zlib1g-dev libssl-dev libpam0g-dev # Debian/Ubuntu sudo yum install -y gcc make zlib-devel openssl-devel pam-devel # CentOS
安装完成后如何验证ssh服务正常启动
安装包不是装完就结束,必须确认服务已经运行并监听在22端口,执行下面几步,能快速定位绝大多数问题。
检查服务状态与开机自启
使用systemd初始化系统的Linux发行版,通杀以下命令:
sudo systemctl status sshd # Ubuntu下也可写成 ssh sudo systemctl enable sshd # 设置开机自启 sudo systemctl restart sshd # 修改配置后重启
如果status显示“Active: active (running)”则说明服务已正常,若显示failed,需要查看日志。
验证端口监听情况
服务正常运行后,22端口应当处于监听状态,使用ss命令或netstat查看:
ss -tlnp | grep :22
如果没有任何输出,先确认服务启动,再检查防火墙设置,防火墙往往才是连不上的根源。
安装好的ssh服务器还需要哪些安全增强包
一旦sshd服务开放到公网,各种扫描流量就会接踵而至,与单纯安装核心包相比,以下是更推荐的安全配置组合。
管理用户和密钥认证相关组件
密钥认证比密码登录安全得多,客户端生成密钥对需要的是openssh-client包,这个包在多数发行版中也被称为ssh-import-id,在服务端,则需要确认~/.ssh目录权限正确:
mkdir -p ~/.ssh chmod 700 ~/.ssh touch ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
这些操作不需要额外安装软件包,但很多新手误以为需要安装某个“密钥工具”,实际上密钥生成和认证功能已整合在openssh系列包内。
自动屏蔽暴力破解的辅助包
业内专家指出,单纯靠SSH自身的配置还不够,安装fail2ban可以动态拦截多次登录失败的IP,这款工具的包名在各大软件源中完全一致,直接安装即可:
sudo apt install fail2ban # Ubuntu sudo yum install fail2ban # CentOS
安装后需打开/etc/fail2ban/jail.local,将enabled设为true,并指定sshd服务,如果使用了云服务器,建议同时开启防火墙服务,如Ubuntu的ufw或CentOS的firewalld,只放行22端口来源IP。
日志与监控组件并非必须
有些教程会建议安装sar或auditd查看SSH登录历史,但这只是运维辅助手段,不影响服务本身运行,资源紧张的服务器不必安装,登录日志可以通过journalctl或/var/log/auth.log直接获取。
ssh服务器安装后无法连接的排查步骤
安装完openssh-server,但远程工具始终超时,这种情况很常见,不要急着卸载重装,下面几步按顺序排查。
从客户端收集详细日志
在本地电脑执行ssh -v,输出中会显示协商到哪一步被拒绝:
ssh -v root@服务器IP
如果卡在“Connect timeout”,大概率是网络不通或防火墙拦截,如果收到“Connection refused”,则服务端sshd并没有监听。
检查服务端防火墙与SELinux
大多数连接问题源于防火墙策略,Ubuntu上先查ufw状态:
sudo ufw status
若输出显示22/tcp被阻止,执行sudo ufw allow 22/tcp,CentOS 7以上需检查firewalld:
sudo firewall-cmd --list-all sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --reload
CentOS系统默认启用SELinux,需要确认ssh_sysadm_connect相关布尔值是否打开,临时可执行setsebool -P ssh_sysadm_connect on,但生产环境最好针对端口和进程做精细配置。
确认sshd配置文件语法
修改过/etc/ssh/sshd_config后,重启前先测试语法:
sudo sshd -t
任何输出都会提示你的错误,常见问题是PermitRootLogin设置不当,导致root无法登录,普通用户却能登录,注意该参数可取值包括prohibit-password、yes、no,多数第三方工具要求设为prohibit-password以允许密钥登录。
ssh服务器安装包常见问题解答
围绕安装包本身,有几个问题被反复提及。
是否只需要安装openssh-server一个包?
实际使用中建议同时安装openssh-client,因为scp、ssh-keygen等工具都由该包提供,只装server也能启动sshd,但不能在本机生成密钥对或执行scp上传操作,若客户端也有,可用scp ~/.ssh/id_rsa.pub user@server:~/.ssh/authorized_keys直接上传公钥。
云主机镜像自带的openssh版本需要升级吗?
云厂商提供的公共镜像一般已经预装openssh-server,但版本可能较旧,由于SSH协议兼容性极强,只要没有高危漏洞,不建议频繁升级,如果需要确认当前版本,执行ssh -V,若担心安全,重点应放在禁用密码登录和禁用root直接登录上,而不是追求新版本。
安装后如何调整连接超时时间?
有些服务器网络较慢,连接会卡在gssapi认证阶段,此时安装包并不需要变更,只需修改sshd_config中的GSSAPIAuthentication为no,同时增加ClientAliveInterval保持会话,这些参数属于配置层面,与包列表无关,修改后执行sudo systemctl restart sshd即可生效。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/699593.html





