linux基础_ssh

蛋蛋 2026年07月27日 5 0

SSH 基础命令与配置实践文档


目录


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.denyincludefiles 关键字的扩展

3.1 检查 tcp_wrappers(libwrap)是否安装

tcp_wrappers (或 libwrap) 控制哪些主机可以连接SSH,相关规则写在 /etc/hosts.allow/etc/hosts.deny 文件中。

一般安装 sshd 时,会默认安装 tcp_wrapperslibwrap

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.denyincludefiles /etc/a.list 实验

假设你要在 /etc/hosts.deny 中写如下内容:

includefiles /etc/a.list

操作步骤

  1. 分别切换到 openEuler、CentOS 7 子系统进行操作

  2. 编辑 /etc/hosts.deny

    sudo vim /etc/hosts.deny
    

    内容如下:

    sshd: all
    includefiles /etc/a.list
    

    注:已测试,修改完即生效

  3. 重启 SSH 服务(修改完即生效)

    sudo service sshd restart
    #
    # 或
    sudo systemctl restart sshd
    
  4. 测试 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.denyincludefiles /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 控制实验

Last Updated: 2026/07/27 20:11:24
【职教】1 [Linux内核编译]:静态调用依赖于 libelf 的版本?