ssh之密钥登录

    用ssh秘钥连接非常方便,一方面可以设置参数提高系统安全性(PermitRootLogin prohibit-password root用户只能秘钥登录),一方面在两个服务器之间连接时省去了输密码的麻烦,列举两个ssh秘钥的配置方法

在SSH密钥对中,id_rsa 和 id_rsa.pub 分别代表私钥和公钥。具体来说:

  • id_rsa 是私钥。私钥应当保密,不应与任何人或任何服务共享。它保存在本地计算机上,用于匹配公钥并验证身份。私钥的权限应严格限制为只有所有者可以读取(在Unix/Linux系统中,权限通常设置为600)

  • id_rsa.pub 是公钥。公钥可以分享给任何需要验证你身份的系统,例如SSH服务器或GitHub等代码托管平台。当你尝试连接这些系统时,系统会利用你的公钥验证你是否持有相应的私钥

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

关键安全注意事项

  1. 文件权限要求

    • ~/.ssh 目录权限必须为 700

    • authorized_keys 文件权限必须为 600

    • 私钥文件权限必须为 600

  2. 服务端配置检查

     
    # 确保以下配置在 /etc/ssh/sshd_config 中
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
    PasswordAuthentication no  # 建议禁用密码认证
    
    systemctl restart sshd

    连接失败时添加 -v 参数查看详细日志:

     
    ssh -v user@remote_server

发表评论

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

滚动至顶部