该 Puppet 模块提供安全的 ssh-client 和 ssh-server 配置。
saz/ssh (>= 2.3.6)、puppetlabs/stdlib (>= 4.2.0)ipv6_enabled = false - 如果需要 IPv6,则设为 truecbc_required = false - 如果加密算法需要 CBC,则设为 true。这通常仅在较旧的 M2M 机制需要通过 SSH 通信,且未启用任何已配置的安全加密算法时才需要。CBC 是一种较弱的替代方案。任何更弱的算法都应避免,因此不可用。weak_hmac = false - 如果需要较弱的 HMAC 机制,则设为 true。这通常仅在较旧的 M2M 机制需要通过 SSH 通信,且未启用任何已配置的安全 HMAC 时才需要。weak_kex = false - 如果需要较弱的密钥交换(KEX)机制,则设为 true。这通常仅在较旧的 M2M 机制需要通过 SSH 通信,且未启用任何已配置的安全 KEX 时才需要。allow_root_with_key = false - 设为 false 以完全禁用 root 登录。设为 true 以允许 root 通过基于密钥的机制登录。ports = [ 22 ] - ssh-server 应监听的端口,以及 ssh-client 应连接的端口listen_to = [ "0.0.0.0" ] - ssh-server 应监听的一个或多个 IP 地址。默认为空,但出于安全原因应进行配置!remote_hosts - ssh-client 可以连接的一个或多个主机。默认为空,但出于安全原因应进行配置!allow_tcp_forwarding = false - 设为 true 以允许 TCP 转发allow_agent_forwarding = false - 设为 true 以允许代理转发use_pam = false 以禁用 PAM 认证client_options = {} - 在哈希中设置值以覆盖模块的设置server_options = {} - 在哈希中设置值以覆盖模块的设置添加此模块后,您可以使用该类:
class { 'ssh_hardening': }
这将安装 ssh-server 和 ssh-client。您也可以选择仅安装其中一个:
class { 'ssh_hardening::server': }
class { 'ssh_hardening::client': }
您应配置核心属性:
class { 'ssh_hardening::server':
"listen_to" : ["10.2.3.4"]
}
listen_to 的默认值为 0.0.0.0。强烈建议更改该值。
默认选项将与通过 client_options 和 server_options 参数传入的选项合并。
如果某个选项同时通过默认值和 options 参数设置,则后者将生效。
以下示例将启用默认情况下禁用的 X11Forwarding:
class { 'ssh_hardening':
server_options => {
'X11Forwarding' => 'yes',
},
}
对于本地测试,您可以使用 vagrant 以及 Virtualbox 或 VMWare 在本地运行测试。您需要在系统上安装 Virtualbox 和 Vagrant。请参阅 Vagrant Downloads 获取适合您系统的 vagrant 软件包。我们所有的测试均使用 test-kitchen。如果您不熟悉 test-kitchen,请参阅他们的指南。
接下来安装 test-kitchen:
# 安装依赖
gem install bundler
bundle install
# 获取测试
bundle exec thor kitchen:fetch-remote-tests
# 执行 lint 检查
bundle exec rake lint
# 执行 spec 检查
bundle exec rake spec
# 在单台机器上快速测试
bundle exec kitchen test default-ubuntu-1204
# 在基于 Debian 的机器上测试
bundle exec kitchen test
# 用于开发
bundle exec kitchen create default-ubuntu-1204
bundle exec kitchen converge default-ubuntu-1204
更多信息请参阅 test-kitchen
我无法登录我的账户。我已经注册了客户端密钥,但仍然无法登录。
如果您已排查了所有常见问题(防火墙、网络、密钥缺失、密钥错误、账户被禁用等),则可能是您的账户被锁定。最快的排查方法是查看您用户的密码哈希:
sudo grep myuser /etc/shadow
如果哈希中包含 !,则您的账户已被锁定:
myuser:!:16280:7:60:7:::
正确的解决方法是解锁账户(passwd -u myuser)。如果该用户没有密码,您可以通过以下方式解锁:
usermod -p "*" myuser
或者,如果您打算使用 PAM,您可以通过 use_pam = true 启用它。PAM 将允许被锁定的用户使用密钥登录。
为什么我的应用程序无法再通过 SSH 连接?
请始终先查看日志文件,如果可能,请查看连接时客户端与服务器之间完成的协商过程。
我们已在一些应用程序(基于 python 和 ruby)中看到过一些问题,这些问题源于它们使用了过时的加密套件。这与本加固模块相冲突,该模块将密码、消息认证码(MAC)和密钥交换(KEX)算法的列表缩减为更安全的选择。
如果您发现这还不够,可以随时为密码激活 cbc_required,为 MAC 激活 weak_hmac,为 KEX 激活 weak_kex。
根据 Apache 许可证 2.0 版(“许可证”)授权; 除非遵守许可证,否则您不得使用此文件。 您可以在以下位置获取许可证副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则按许可证分发的软件按“原样”分发, 不附带任何明示或暗示的保证或条件。 请参阅许可证以了解管理权限和限制的特定语言。