SSH 基础命令与配置实践文档
目录
- 1. SSH 基础操作命令
- 2. Windows 子系统(WSL)中安装 SSH 服务
- 3. 支持
/etc/hosts.deny中includefiles关键字的扩展 - 4.
/etc/hosts.deny中includefiles /etc/a.list实验 - 5. 结论总结
1. SSH 基础操作命令
| 命令 | 含义 |
|---|---|
| ssh user@host | 连接远程主机 |
| ssh -p 端口 user@host | 指定端口登录远程主机 |
| ssh-copy-id user@host | 复制本机公钥到目标主机 |
| ssh-keygen -t rsa | 生成SSH密钥对 |
| scp localfile user@host:/path | 复制本地文件到远程主机 |
| scp user@host:/path/file ./ | 从远程主机复制文件到本地 |
| service sshd start/stop/restart | 管理SSH服务(需要root权限,根据发行版不同有变化) |
| systemctl start/stop/restart sshd | 管理SSH服务(推荐新系统用) |
2. Windows 子系统(WSL)中安装 SSH 服务
2.1 openEuler 子系统安装 SSH
sudo dnf install -y openssh-server openssh-clients
sudo systemctl start sshd # WSL如无systemctl,用: sudo service sshd start
sudo systemctl enable sshd # 或: sudo chkconfig sshd on
2.2 CentOS 7 子系统安装 SSH
sudo yum install -y openssh-server openssh-clients
sudo systemctl start sshd # 或: sudo service sshd start
sudo systemctl enable sshd
注意:WSL 子系统可能没有 systemd 正常启动环境,推荐直接用
sudo service sshd start或/usr/sbin/sshd启动。
3. 支持 /etc/hosts.deny 中 includefiles 关键字的扩展
3.1 检查 tcp_wrappers(libwrap)是否安装
tcp_wrappers (或 libwrap) 控制哪些主机可以连接SSH,相关规则写在 /etc/hosts.allow 和 /etc/hosts.deny 文件中。
一般安装 sshd 时,会默认安装 tcp_wrappers 或 libwrap:
openEuler / CentOS 7 检查方法
rpm -q tcp_wrappers
# 或
rpm -q libwrap
# 或
ldd /usr/sbin/sshd | grep wrap
正常应该输出含有 libwrap.so。
如果没有,可以安装:
# openEuler:
sudo dnf install tcp_wrappers
# CentOS 7:
sudo yum install tcp_wrappers
欧拉支持tcpwrap包:
sshd_tcpwrap-1.0-0.noarch.rpm
欧拉yum源:
openEuler-22.x.repo
3.2 支持 include 语法的扩展
部分发行版(如Debian/Ubuntu)支持类似如下 Hosts Access 控制文件扩展语法:
includefiles /etc/a.list
includefiles /etc/other.list
不过,CentOS 7 和 openEuler 默认自带的 tcp_wrappers 一般不支持这种 includefiles 扩展语法,这是 Debian GNU/Linux 的补丁 才有的功能。
如果要支持该扩展,需要自行打补丁或者用带扩展的 tcp_wrappers 组件,对于大部分 RHEL/CentOS系发行版,该语法会被忽略或者报错,通常不会影响其它正常规则执行。
4. /etc/hosts.deny 中 includefiles /etc/a.list 实验
假设你要在 /etc/hosts.deny 中写如下内容:
includefiles /etc/a.list
操作步骤
-
分别切换到 openEuler、CentOS 7 子系统进行操作。
-
编辑
/etc/hosts.deny:sudo vim /etc/hosts.deny内容如下:
sshd: all includefiles /etc/a.list注:已测试,修改完即生效
-
重启 SSH 服务(修改完即生效)
sudo service sshd restart # # 或 sudo systemctl restart sshd -
测试 SSH 连接拒绝情况(建议从Windows主机或别的主机 ssh 登陆当前WSL实例测试)
sudo ssh localhost -p 63501
4.1 配置文件不存在时的表现
- 如果你在
/etc/hosts.deny添加了includefiles /etc/a.list,但是/etc/a.list文件并不存在,会发生什么? - 在绝大多数情况下(openEuler 和 CentOS 7的 tcp_wrappers 版本),这个扩展关键字会被完全忽略。
- sshd 不会读取
/etc/a.list,不会报错,也不会额外拒绝什么。只有/etc/hosts.deny里明确写出来的规则会生效。 - 你可以在
/var/log/secure或/var/log/messages等文件中查找报错,一般不会见到因该行导致的日志。
验证方法
-
如果你在
/etc/hosts.deny只写includefiles /etc/a.list并且没有其它规则,sshd默认表现为允许所有主机连接,
/etc/a.list不存在不会引起任何实际限制。
总结现象
- 文件不存在:没有影响,规则不生效,不报错。
- 文件存在但规则异常:也不会应用到 SSH 访问控制。
- 如有需要生效,必须自行合并规则写入
/etc/hosts.deny或/etc/hosts.allow,而不是用includefiles。
5. 结论总结
-
WSL 子系统 openEuler 和 CentOS 7 下 SSH 基础命令完全一致,配置互不影响。
-
/etc/hosts.deny的includefiles /etc/a.list语法在 openEuler 和 CentOS 7 上(即 RHEL 系列默认 tcp_wrappers/openssh)通常无效,可以安全忽略。 -
/etc/a.list文件不存在不会影响 /etc/hosts.deny 的其它规则的生效,不会导致任何额外限制或报错。 -
要实现访问控制,建议直接在
/etc/hosts.deny或/etc/hosts.allow明确写规则,例如:sshd: 192.168.1.100 sshd: ALL -
如果确实需要跨文件合并规则,只能自己通过脚本自动生成合并(如
cat拼合),而不能直接用includefiles扩展。 -
实验验证方法如需详细,请按上述步骤验证 SSH 访问表现,查看日志。
附参考:常用 SSHD 服务管理命令
# 启动 SSH 服务
sudo service sshd start
sudo systemctl start sshd
# 停止 SSH 服务
sudo service sshd stop
sudo systemctl stop sshd
# 重启 SSH 服务
sudo service sshd restart
sudo systemctl restart sshd
# 查看 SSH 服务状态
sudo service sshd status
sudo systemctl status sshd
附参考:手动合并 hosts.deny 规则的脚本
# 合并主配置和附加文件内容
cat /etc/hosts.deny /etc/a.list > /etc/hosts.deny.merged
mv /etc/hosts.deny.merged /etc/hosts.deny
本文件适用于 WSL(Windows子系统)中 openEuler 与 CentOS 7 的 SSH 服务基础命令学习与 hosts.deny 控制实验