密码身份验证在很多情形下是不足安全的。密码可能会被预测、被破解,乃至在传输过程中被中间人攻击威胁。而密钥身份验证通过利用公钥和私钥的组合,大大增加了安全性。私钥存储在用户本地,而公钥则被放置在远程做事器上。这种组合使得攻击者纵然截获了公钥,也难以逆向推导出私钥,从而供应了更加安全的身份验证手段。
天生 SSH 密钥对
首先,确保你的 Linux 系统上安装了 OpenSSH 工具。大多数 Linux 发行版都默认安装了这个工具,但如果你的系统没有安装,你可以利用包管理器来安装它。
sudo apt updatesudo apt install openssh-client openssh-server
在 Red Hat/CentOS 上利用 yum 安装 OpenSSH:
sudo yum install openssh-clients openssh-server
利用 ssh-keygen 天生密钥对
一旦安装了 OpenSSH,你就可以利用 ssh-keygen 命令天生 SSH 密钥对。这个命令的基本用法如下:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-t rsa 指定密钥类型为 RSA。-b 4096 指定密钥长度为 4096 比特,提高安全性。-C "your_email@example.com" 添加注释,一样平常用你的邮箱地址。
天生密钥对后,你可以选择将其存储在默认位置(~/.ssh/ 目录下)或选择其他位置。
天生的密钥对包括两个文件:私钥文件(id_rsa)和公钥文件(id_rsa.pub)。私钥文件存储在本地,而公钥文件则须要被复制到远程做事器上。
私钥是敏感信息,必须妥善保存。公钥则是用于身份验证的公开信息。
密钥的存储和管理默认情形下,天生的 SSH 密钥对会存储在用户的 ~/.ssh/ 目录下。这个目录包含了两个紧张文件:id_rsa(私钥)和 id_rsa.pub(公钥)。这种设置是为了方便用户在利用 SSH 时能够轻松找到和管理密钥。
然而,有时出于安全或组织的考虑,你可能想要将密钥存储在其他位置。这可以通过在天生密钥对时指定存储路径来实现。例如:
ssh-keygen -t rsa -b 4096 -f /path/to/your/keys/my_key -C "your_email@example.com"
这样会将私钥存储为 /path/to/your/keys/my_key,公钥存储为 /path/to/your/keys/my_key.pub。
SSH 密钥代理是一个可以管理 SSH 私钥的程序,可以在一次登录后将私钥的解密密码缓存起来,以便后续的 SSH 操作无需再次输入密码。
启动 SSH 代理:eval "$(ssh-agent -s)"
添加私钥到代理:
ssh-add ~/.ssh/id_rsa
这样,你就不须要每次 SSH 登录都输入私钥密码了,提高了利用的便利性和安全性。
在实际利用中,你可能会有多个密钥对,用于不同的做事器或用场。为了更好地管理这些密钥对,可以利用 SSH 配置文件或密钥文件的别名。
配置 SSH 做事器登录到目标做事器在你能够利用 SSH 密钥身份验证登录到目标做事器之前,确保目标做事器上已经启用了 SSH 做事。在大多数 Linux 系统中,默认情形下,SSH 做事是启动的。
ssh username@your_server_ip
确保更换 username 为你的用户名,your_server_ip 为目标做事器的 IP 地址。这将考试测验利用默认的密码身份验证登录。
手动安装公钥手动安装公钥是一种基本的方法,它涉及将你的公钥内容添加到目标做事器上的 ~/.ssh/authorized_keys 文件中。
将本地公钥内容复制到剪贴板:cat ~/.ssh/id_rsa.pub
在目标做事器上,利用文本编辑器打开 ~/.ssh/authorized_keys 文件:
nano ~/.ssh/authorized_keys
将剪贴板上的公钥内容粘贴到文件末端,并保存文件。回到本地机器,考试测验利用密钥身份验证登录:
ssh username@your_server_ip
通过 ssh-copy-id 简化公钥支配
ssh-copy-id 命令可以简化将本地公钥复制到远程做事器的过程。这个命令会自动处理将公钥添加到目标做事器的 ~/.ssh/authorized_keys 文件中。
ssh-copy-id username@your_server_ip
确保更换 username 为你的用户名,your_server_ip 为目标做事器的 IP 地址。这个命令将提示你输入用户密码,然后将本地公钥复制到目标做事器上。
通过这两种方法,你可以在目标做事器上配置 SSH 密钥身份验证,提高登录的安全性和便利性。
SSH 配置文件详解~/.ssh/config 文件的浸染和构造~/.ssh/config 文件是一个用于配置 SSH 客户端行为的配置文件。它许可你为不同的主机设置自定义的配置选项,从而简化 SSH 连接的管理。
创建 ~/.ssh/config 文件:touch ~/.ssh/config
编辑 ~/.ssh/config 文件:
nano ~/.ssh/config
利用别名、端口号等配置项简化 SSH 连接
配置文件中可以包含多个主机条款,每个条款定义了连接到远程主机的配置选项。以下是一个大略的例子:
Host example HostName your_server_ip User username Port 2222 IdentityFile ~/.ssh/id_rsa
Host:设置别名,用于代替实际的主机名。HostName:远程主机的 IP 地址或域名。User:连接时利用的用户名。Port:SSH 连接的端口号。IdentityFile:指定用于身份验证的私钥文件路径。实际场景中的示例配置文件
以下是一个更为繁芜的 ~/.ssh/config 文件,涵盖了多个主机和配置选项:
Host work HostName work.example.com User alice Port 22 IdentityFile ~/.ssh/work_keyHost personal HostName personal.example.org User bob Port 2222 IdentityFile ~/.ssh/personal_keyHost github HostName github.com User git IdentityFile ~/.ssh/github_key
这样,你只须要利用别名就能够轻松连接到相应的主机,而不必记住每个主机的详细信息。
限定和加固 SSH 访问禁用密码身份验证禁用密码身份验证是提高 SSH 安全性的主要步骤之一。这样,用户只能通过密钥身份验证进行访问,而不再依赖弱密码。
在 sshd_config 中禁用密码身份验证:打开 sshd_config 文件:sudo nano /etc/ssh/sshd_config
找到并修正以下行:
PasswordAuthentication no
保存文件并重新启动 SSH 做事:
sudo service ssh restart
利用 sshd_config 文件设置访问限定
sshd_config 文件包含了用于配置 SSH 做事器的各种选项。通过适当配置,你可以限定用户访问、定义许可登录的用户、设置登录时的认证办法等。
一些常用的 sshd_config 选项:AllowUsers:指定许可登录的用户列表。DenyUsers:指定禁止登录的用户列表。AllowGroups:指定许可登录的用户组列表。DenyGroups:指定禁止登录的用户组列表。PermitRootLogin:禁用或限定 root 用户的远程登录。示例:AllowUsers alice bobDenyUsers malloryAllowGroups sshusersDenyGroups badusersPermitRootLogin no
以上配置将只许可用户 alice 和 bob 以及属于 sshusers 组的用户登录,同时谢绝用户 mallory 和属于 badusers 组的用户登录。此外,禁止 root 用户通过 SSH 远程登录。
限定和加固 SSH 访问禁用密码身份验证为了提高 SSH 安全性,强烈建议禁用密码身份验证,仅利用密钥身份验证。在 /etc/ssh/sshd_config 文件中找到并修正以下行:
PasswordAuthentication no
然后重新启动 SSH 做事:
sudo service ssh restart
这样配置后,只有拥有有效私钥的用户才能够进行 SSH 登录,大大增加了系统的安全性。
利用 sshd_config 文件设置访问限定sshd_config 文件包含了 SSH 做事器的配置选项。通过修正这个文件,你可以设置一些限定,例如限定用户和 IP 地址的访问。
打开 /etc/ssh/sshd_config 文件:
sudo nano /etc/ssh/sshd_config
限定用户访问:
AllowUsers username
将 username 更换为许可访问的用户名。你还可以利用逗号分隔的列表许可多个用户。
限定 IP 地址访问:AllowUsers username@your_ip
将 username 更换为许可访问的用户名,your_ip 更换为许可访问的 IP 地址。
许可特定 IP 地址段:AllowUsers username@192.168.1.
这样设置将许可来自 192.168.1 网段的所有 IP 地址的用户访问。
保存文件后,重新启动 SSH 做事:
sudo service ssh restart
利用 TCP Wrappers 进行进一步访问掌握
在 /etc/hosts.allow 和 /etc/hosts.deny 文件中,你可以利用 TCP Wrappers 设置更繁芜的主机访问掌握规则。例如,在 /etc/hosts.allow 中添加以下行:
sshd: 192.168.1.0/255.255.255.0
这样将许可来自 192.168.1 网段的所有主机访问 SSH 做事。
限定和加固 SSH 访问禁用密码身份验证禁用密码身份验证是提高 SSH 安全性的一种有效方法。通过仅许可利用密钥进行身份验证,可以防止恶意用户通过密码破解考试测验来访问做事器。
在目标做事器上打开 sshd_config 文件:
sudo nano /etc/ssh/sshd_config
找到并修正以下行:
PasswordAuthentication no
保存文件并重新启动 SSH 做事:
sudo service ssh restart
此时,只有拥有合法私钥的用户才能成功进行 SSH 登录。
利用 sshd_config 文件设置访问限定sshd_config 文件包含了配置 SSH 做事器行为的各种选项。通过修正这个文件,可以实现对访问的更精确掌握。
sudo nano /etc/ssh/sshd_config
限定用户和 IP 地址
AllowUsers username@your_ip
这个配置将只许可指定用户从指定 IP 地址进行 SSH 登录。
修正 SSH 端口默认情形下,SSH 做事利用 22 端口。为了提高安全性,可以修正为其他非常用端口,比如 2222:
Port 2222
确保保存修正并重新启动 SSH 做事。
利用 SSH Agent Forwarding什么是 SSH Agent ForwardingSSH Agent Forwarding 是一种机制,许可你在本地系统上解锁私钥,然后通过安全地转发到远程主机,以在远程主机上进行身份验证。这意味着,如果你已经通过密钥身份验证登录到本地机器,你可以利用相同的身份验证在远程主机上实行操作,而无需再次输入密码或私钥。
配置和利用 SSH Agent Forwarding在本地机器上启动 SSH Agent:eval "$(ssh-agent -s)"
添加私钥到代理:
ssh-add ~/.ssh/id_rsa
在连接到远程主机时启用 Agent Forwarding:
ssh -A username@your_server_ip
确保更换 username 为你的用户名,your_server_ip 为目标做事器的 IP 地址。
现在,你可以在远程主机上实行须要私钥身份验证的操作,而无需再次输入密码或私钥。
安全把稳事变只管 SSH Agent Forwarding 供应了便利,但也须要把稳一些安全性问题。确保遵照以下最佳实践:
只许可受信赖的主机利用 Agent Forwarding。 如果你连接到了不受信赖的主机,可以通过利用 -A 参数禁用 Agent Forwarding。定期检讨代理并打消不再须要的密钥。 利用 ssh-add -L 命令查看当前加载的密钥列表,并利用 ssh-add -D 打消不再须要的密钥。在不须要 Agent Forwarding 的情形下禁用它。 只有在确实须要在远程主机上实行私钥身份验证的操作时才启用 Agent Forwarding。通过理解和精确配置 SSH Agent Forwarding,你可以在保持安全性的同时提高 SSH 的便利性。
多成分身份验证(MFA)先容多成分身份验证的主要性多成分身份验证(MFA)是一种安全方法,哀求用户在登录时供应两个或多个独立的身份验证成分,以验证其身份。常日,这包括“知道的事变”(如密码)和“拥有的物件”(如手机或硬件令牌)。
配置和利用基于密钥的 MFA安装并配置 MFA 工具(如 Google Authenticator):sudo apt-get install libpam-google-authenticator
修正 PAM 配置文件:
sudo nano /etc/pam.d/sshd
在文件末端添加以下行:
auth required pam_google_authenticator.so
修正 SSH 配置文件,启用 ChallengeResponseAuthentication:
sudo nano /etc/ssh/sshd_config
确保以下行的值为 yes:
ChallengeResponseAuthentication yes
重启 SSH 做事:
sudo service ssh restart
结合硬件密钥和手机运用的 MFA
除了基于软件的 MFA(如手机运用天生的验证码),你还可以考虑结合硬件密钥,如 YubiKey 或其他支持 U2F 标准的硬件令牌。
在本地机器上配置硬件密钥:ssh-keygen -t ecdsa-sk -f ~/.ssh/id_ecdsa_sk
将天生的公钥添加到 SSH 做事器上的 ~/.ssh/authorized_keys。修正 SSH 配置文件,启用硬件密钥认证:
sudo nano /etc/ssh/sshd_config
确保以下行的值为 yes:
PubkeyAuthentication yesAuthenticationMethods publickey,password publickey,publickey
重启 SSH 做事:
sudo service ssh restart
通过结合不同成分的身份验证,你大大提高了做事器的安全性。
定期更新密钥对为了增加安全性,定期更新 SSH 密钥对是一个好的实践。可以利用以下步骤天生新的密钥对并更换旧的密钥:
# 天生新的密钥对ssh-keygen -t rsa -b 4096 -f ~/.ssh/new_key -C "your_email@example.com"# 复制新的公钥到目标做事器ssh-copy-id username@your_server_ip -i ~/.ssh/new_key.pub# 测试新密钥是否可以成功登录ssh -i ~/.ssh/new_key username@your_server_ip# 如果统统正常,可以删除旧密钥rm ~/.ssh/id_rsa
监控和审计 SSH 访问
启用 SSH 访问的监控和审计功能可以及时创造潜在的安全问题。可以利用工具如 fail2ban 来监控日志文件,自动封禁恶意的 SSH 连接考试测验。
# 安装 fail2bansudo apt install fail2ban # 对付 Debian/Ubuntusudo yum install fail2ban # 对付 Red Hat/CentOS# 启用 SSH 防护sudo systemctl enable fail2bansudo systemctl start fail2ban
通过审查系统日志文件,特殊是 /var/log/auth.log(对付 Debian/Ubuntu)或 /var/log/secure(对付 Red Hat/CentOS),可以查看 SSH 访问的详细信息。
sudo tail -f /var/log/auth.log # 对付 Debian/Ubuntusudo tail -f /var/log/secure # 对付 Red Hat/CentOS
通过监控和审计 SSH 访问,你可以及时创造非常情形,并采纳相应的方法来保护系统安全。