用ssh秘钥连接非常方便,一方面可以设置参数提高系统安全性(PermitRootLogin prohibit-password root用户只能秘钥登录),一方面在两个服务器之间连接时省去了输密码的麻烦,列举两个ssh秘钥的配置方法
在SSH密钥对中,id_rsa 和 id_rsa.pub 分别代表私钥和公钥。具体来说:
id_rsa 是私钥。私钥应当保密,不应与任何人或任何服务共享。它保存在本地计算机上,用于匹配公钥并验证身份。私钥的权限应严格限制为只有所有者可以读取(在Unix/Linux系统中,权限通常设置为600)
id_rsa.pub 是公钥。公钥可以分享给任何需要验证你身份的系统,例如SSH服务器或GitHub等代码托管平台。当你尝试连接这些系统时,系统会利用你的公钥验证你是否持有相应的私钥
目录
Toggle第0步–检查权限
要想顺利使用密钥登录服务器,首先检查被登录服务器的.ssh文件夹权限
SSH要求严格权限设置:
/root/.ssh
目录权限必须为 700(drwx------
)authorized_keys
文件权限必须为 600(-rw-------
)
若权限过松(如其他用户可写),SSH会主动拒绝密钥认证。
xshell等客户端工具连接服务器
这种比较简单,只需要先配置sshd_config的这两个参数,1.把密钥登录打开2.设置存放密钥的文件位置:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
把在服务器上生成好的.pub公钥文件内容追加到/root/.ssh文件夹中的authorized_keys文件中,私钥文件(不带.pub)传到电脑上就可以使用客户端配置连接了,以xshell为例
①首先在服务器上使用ssh -keygen生成秘钥
SSH 密钥对的创建方法
1. 默认生成 RSA 密钥–ssh-keygen
ssh-keygen -t rsa -b 4096 -C "your_comment"
# 按提示选择保存路径(默认 ~/.ssh/id_rsa)
# 输入密钥密码(可选,直接回车跳过)
#-t选择类型 -b 设置密钥长度 -C "注释文字"
2. 生成 ED25519 密钥(更安全)
ssh-keygen -t ed25519 -a 100 -C "your_comment"
3. 生成 ECDSA 密钥
ssh-keygen -t ecdsa -b 521 -C "your_comment"
②服务器端进入.ssh目录执行
cat id_rsa.pub >> authorized_keys
③利用各种方式把私钥id_rsa传输到电脑中
个人推荐在服务器上安装lrzsz,用xshell密码连接服务器,使用sz命令传输,格式 sz + 文件名(见下图)
④打开xshell端工具→用户密钥管理者→把服务器刚生成好的id_rsa密钥导入进去,导入之前可以先给文件改个名方便辨认
在这里点击设置进去就可以选择刚才导入的id_rsa配置密钥连接
客户端连接服务端(两台服务器)
客户端远程连接服务端密钥配置
1. 将客户端.pub公钥上传至服务端
# 方法一:使用 ssh-copy-id(推荐) ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_server -p 22 # 方法二:手动追加公钥 cat ~/.ssh/id_rsa.pub | ssh user@remote_server "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
2. 配置客户端快捷连接(可以更好的区分使用哪个私钥文件连接不同的服务端)
编辑 ~/.ssh/config
文件:
Host 主机名(提前配置/etc/hosts) HostName 192.168.1.100 服务端ip/域名 User root Port 22 IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes#确保SSH只使用命令行或配置文件中指定的密钥,
不会自动尝试其他可用密钥,这在多密钥环境下很有用,避免认证错误。
3. 验证连接
ssh myserver(服务端) # 无需输入密码即表示成功
双机互信配置(Server A ↔ Server B)
1. 在 Server A 生成密钥
ssh-keygen -t ed25519 -f ~/.ssh/server_a -C "注释"
2. 将 Server A 公钥部署到 Server B
ssh-copy-id -i ~/.ssh/server_a.pub user@server_b
3. 在 Server B 生成密钥
ssh-keygen -t ed25519 -f ~/.ssh/server_b -C "注释"
4. 将 Server B 公钥部署到 Server A
ssh-copy-id -i ~/.ssh/server_b.pub user@server_a
5.Server A 配置.ssh/config
HOST server_b
HostName ip_serverb
User root
IdentityFile /root/.ssh/server_a_rsa
6.Server B 配置.ssh/config
HOST server_a
HostName ip_server_a
User root
IdentityFile /root/.ssh/server_b_rsa
5. 验证双向免密登录
# 从 A 连接 B ssh user@server_b # 从 B 连接 A ssh user@server_a
关键安全注意事项
文件权限要求:
~/.ssh
目录权限必须为700
authorized_keys
文件权限必须为600
私钥文件权限必须为
600
服务端配置检查:
# 确保以下配置在 /etc/ssh/sshd_config 中 PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no # 建议禁用密码认证 systemctl restart sshd
连接失败时添加
-v
参数查看详细日志:ssh -v user@remote_server