SSH密钥对通过非对称加密实现安全远程登录,使用ssh-keygen生成密钥,ssh-copy-id部署公钥,私钥加密码保护并严格设置文件权限,结合~/.ssh/config和ssh-agent可高效管理多密钥,避免密码认证风险,提升安全性和自动化能力。

在Linux环境中,管理密钥对,特别是通过
ssh-keygen
SSH密钥对的使用,在我看来,是远程管理Linux服务器的基石。它的流程其实并不复杂,但每一步都值得细心对待。
首先,我们通常在本地机器上生成密钥对。最常见的命令是:
ssh-keygen -t rsa -b 4096 -C "你的邮箱或标识符"
-t rsa
ed25519
-b 4096
-C
~/.ssh/id_rsa
生成成功后,你会得到两个文件:
id_rsa
id_rsa.pub
chmod 600 ~/.ssh/id_rsa
下一步是将公钥部署到目标服务器。最便捷的方式是使用
ssh-copy-id
ssh-copy-id 用户名@目标服务器IP或域名
~/.ssh/authorized_keys
.ssh
authorized_keys
如果
ssh-copy-id
id_rsa.pub
~/.ssh/authorized_keys
authorized_keys
~/.ssh
700
authorized_keys
600
完成这些步骤后,你就可以直接使用
ssh 用户名@目标服务器IP或域名
从我个人的经验来看,一旦你习惯了SSH密钥,就很难再回到纯密码认证的时代了。它不仅仅是方便,更重要的是它在安全性上提供了质的飞跃。
密码认证的本质是,你需要将你的秘密(密码)通过网络传输给服务器,服务器验证后让你登录。这个过程中,密码有被嗅探、被暴力破解的风险。即使密码设置得足够复杂,也无法完全避免字典攻击或彩虹表攻击。更别提很多人为了方便,会设置一些弱密码,或者在不同服务间复用密码,这简直是安全灾难。
SSH密钥对则完全不同。它基于非对称加密原理。你的私钥永远不会离开你的本地机器。当你尝试连接服务器时,服务器会发送一个随机挑战,你的客户端使用私钥对这个挑战进行签名,然后将签名发回服务器。服务器使用你预先部署的公钥来验证这个签名。如果签名匹配,就证明你是合法的用户。整个过程中,你的私钥从未被传输,也就不存在被截获的风险。攻击者即使截获了通信数据,也无法从中反推出你的私钥。
此外,密钥的长度通常远超密码的复杂度。一个4096位的RSA密钥,其破解难度是天文数字级别的,远超任何人类能记住的复杂密码。这意味着暴力破解几乎不可能成功。
当然,密钥也并非万无一失。如果你的私钥文件本身被盗,并且没有设置密码保护,那么攻击者就能直接冒充你。这就是为什么我反复强调私钥的权限管理和密码保护的重要性。但是,相比于密码认证,SSH密钥对在设计上就提供了更高的安全性层级,并且显著提升了远程操作的效率,尤其是在自动化脚本或持续集成/部署(CI/CD)流程中,密钥认证几乎是唯一的选择。
生成密钥对时,
ssh-keygen
首先是加密算法的选择。
-t rsa
-t ed25519
ed25519
然后是密钥长度。
-b 4096
ed25519
注释。
-C "your_email@example.com"
authorized_keys
密码(Passphrase)。 这是我一直强调的,也是最容易被忽视但极其重要的一个环节。当你生成密钥时,系统会提示你输入一个密码。这个密码是用来加密你的私钥文件的。即使你的私钥文件不幸被泄露,没有这个密码,攻击者也无法使用它。这就像给你的房子加了道大门(SSH密钥),然后又给大门上了一把锁(Passphrase)。当然,每次使用私钥都需要输入密码可能会有些不便,但你可以结合
ssh-agent
文件保存位置。 默认情况下,
ssh-keygen
~/.ssh/id_rsa
~/.ssh/id_rsa.pub
-f
ssh-keygen -f ~/.ssh/id_work_rsa -C "Work Key"
最后,权限设置是重中之重。 你的
~/.ssh
700
~/.ssh/id_rsa
600
~/.ssh/id_rsa.pub
644
随着你使用SSH密钥的场景越来越多,你可能会发现自己需要管理不止一个密钥对。比如,你可能有一个密钥用于公司内部服务器,另一个用于GitHub,还有一个用于个人VPS。这时,
~/.ssh/config
管理多个密钥
~/.ssh/config
一个典型的
~/.ssh/config
Host github.com
Hostname github.com
User git
IdentityFile ~/.ssh/id_github_rsa
IdentitiesOnly yes
Host my_vps
Hostname 192.168.1.100
User admin
IdentityFile ~/.ssh/id_vps_ed25519
Port 2222 # 如果你的SSH服务不在默认端口
IdentitiesOnly yes
Host *
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
# AddKeysToAgent yes # 自动将密钥添加到ssh-agentHost
ssh github.com
Hostname
User
IdentityFile
Port
IdentitiesOnly yes
IdentityFile
ssh-agent
ssh-agent
SSH Agent的妙用
如果你为私钥设置了密码,那么每次使用密钥连接时都需要输入密码,这无疑会降低效率。
ssh-agent
ssh-agent
启动
ssh-agent
eval "$(ssh-agent -s)" # 启动ssh-agent ssh-add ~/.ssh/id_rsa # 添加你的私钥,会提示你输入密码
如果你有多个私钥,可以逐一
ssh-add
处理常见的连接问题
SSH连接失败是常有的事,以下是一些我经常遇到的问题和排查思路:
权限问题:这是最最常见的。如果你的私钥、公钥或
~/.ssh
ls -l ~/.ssh/
ls -l ~/.ssh/id_rsa*
600
644
.ssh
700
~/.ssh
700
~/.ssh/authorized_keys
600
ssh -v 用户名@服务器
公钥未正确部署:
~/.ssh/authorized_keys
authorized_keys
SSH服务配置:
sshd
sshd_config
/etc/ssh/sshd_config
PubkeyAuthentication yes
PasswordAuthentication yes
sshd
防火墙:
用户名不匹配:
authorized_keys
当遇到连接问题时,最有效的诊断工具就是SSH客户端的详细输出:
ssh -vvv 用户名@服务器
Permission denied (publickey).
sshd_config
Authentication failed.
ssh-agent
管理密钥对和解决问题,很多时候就是这样一步步排查的过程。熟练掌握这些,你会发现Linux世界的大门为你敞开得更宽。
以上就是如何在Linux中管理密钥对 Linux ssh-keygen生成的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号