如何通过SSH Key实现安全的Linux远程登录?

Linux SSH 是用于安全远程登录和管理 Linux 服务器的命令行工具。使用密钥对(公钥和私钥)进行身份验证,比密码更安全。生成密钥对,将公钥添加到服务器的 authorized_keys 文件,然后通过 SSH 客户端使用私钥登录。

在Linux系统中,SSH(Secure Shell)是一种广泛使用的网络协议,用于加密方式在网络上完成远程连接和管理,它能够提供安全的通道,使得用户可以通过不安全的网络进行安全的操作,使用密钥对进行认证是SSH中一种常见且推荐的安全登录方式,本文将深入解析SSH的key登录机制,包括其工作原理、配置方法以及日常应用中的注意事项。

linux ssh 使用深度解析(key登录详解)
(图片来源网络,侵删)

SSH key登录基础

生成密钥对

首先需要为用户生成密钥对,包含一个公钥和一个私钥,在大多数Linux发行版中,可以使用sshkeygen命令来完成这一操作:

sshkeygen t rsa

执行上述命令后,系统会提示你保存密钥的位置和设置密码,默认情况下,公钥和私钥会保存在~/.ssh/目录下,文件名通常为id_rsa(私钥)和id_rsa.pub(公钥)。

部署公钥到服务器

linux ssh 使用深度解析(key登录详解)
(图片来源网络,侵删)

将生成的公钥部署到你想要通过SSH访问的远程服务器上,这通常涉及到将公钥内容复制到一个特定的文件中,例如~/.ssh/authorized_keys在远程用户的家目录中。

登录服务器

使用SSH客户端连接到服务器时,客户端会自动使用对应的私钥进行身份验证:

ssh i ~/.ssh/id_rsa user@remotehost

i选项指定了私钥文件的路径,如果一切配置正确,你应该能够无需输入密码即可登录到远程服务器。

高级配置与管理

linux ssh 使用深度解析(key登录详解)
(图片来源网络,侵删)

禁用密码认证

为了提高安全性,可以在服务器上禁用基于密码的认证,仅允许密钥对认证,这可以通过编辑SSH服务器配置文件/etc/ssh/sshd_config来实现,将PasswordAuthentication设置为no

PasswordAuthentication no

然后重启SSH服务以应用更改:

sudo systemctl restart ssh

密钥管理最佳实践

不要重复使用密钥:每个重要的服务或机器应该有自己独立的密钥对。

定期更换密钥:周期性地重新生成密钥对并更新相关配置,有助于减少潜在的安全风险。

保护私钥:确保私钥文件的权限得当(通常为600),并且对其进行妥善保管,避免泄露。

相关问题与解答

Q1: 如果私钥丢失或泄露该怎么办?

A1: 如果私钥丢失,你需要重新生成新的密钥对并将其部署到所有需要访问的服务器上,如果私钥泄露,除了重新生成密钥外,还需要检查所有使用该密钥的服务器以确保没有未授权的访问,并考虑改变那些服务器的相关安全设置。

Q2: 如何限制特定密钥只能在特定时间或来自特定IP地址的连接请求?

A2: 这可以通过编辑/etc/ssh/sshd_config文件实现,你可以使用Match指令来限定条件,比如限定某个特定密钥的使用时间或来源IP:

Match User someuser, Keys=/path/to/key.pub
    AllowUsers someuser
    PasswordAuthentication No
    # 可以添加更多的限制条件,如:
    # AcceptEnv LANG LC_*
    # LimitPrivileges yes
    # PubkeyAuthentication yes
    # RekeyLimit 1G 1H
    # MaxSessions 1
    # ClientAliveInterval 120
    # ClientAliveCountMax 3
    # Banner /etc/issue.net
    # PermitEmptyPasswords no
    # X11Forwarding no
    # AllowTcpForwarding no
    # ForceCommand command
    # AuthorizedKeysFile .ssh/authorized_keys2
    # HostCertificate /path/to/cert.pem
    # ReverseMappingCheck yes
    # Ciphers aes256ctr
    # AddressFamily any
    # ListenAddress 0.0.0.0 bind to this address
    # ListenAddress :: listen on IPv6 only
    # Compression no disable compression
    # LogLevel INFO log level is VERBOSE
    # SyslogFacility AUTHPRIV capture in secure syslog
    # SyslogFacility USER capture in user syslog
    # SyslogFacility LOCAL0 capture locally with dæmon
    # RSAAuthentication yes
    # PubkeyAuthentication yes
    # ChallengeResponseAuthentication no
    # GSSAPIAuthentication no
    # GSSAPICleanupCredentials yes
    # UsePAM yes
    # AcceptEnv LANG LC_*
    # Subsystem sftp internalsftp
    # X11Forwarding no
    # StreamLocalBindUnlink no
    # GatewayPorts no
    # PermitTTY yes force pseudo tty allocation
    # PrintMotd no don't print the motd (message of the day)
    # PrintLastLog yes, shown during last log read
    # TCPKeepAlive yes
    # UseLogin no
    # CompressionDelay 9
    # ClientAliveInterval 120 keep client alive messages periodically sent to prevent NAT timeout

配置示例展示了如何限制用户someuser只能使用指定的密钥文件/path/to/key.pub进行登录,并附加了多项安全增强措施,记得修改完成后重启SSH服务使配置生效。

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/959135.html

(0)
未希的头像未希新媒体运营
上一篇 2024-08-30 11:05
下一篇 2024-08-30 11:07

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

免费注册
电话联系

400-880-8834

产品咨询
产品咨询
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入