闲碎记事本 闲碎记事本
首页
  • JAVA
  • Cloudflare
  • 学完再改一遍UI
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

YAN

我要偷偷记录...
首页
  • JAVA
  • Cloudflare
  • 学完再改一遍UI
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • java

  • linux

    • Shell基础
    • OpenEuler系统JAVA部署问题
    • sshpass 使用
    • 固定机器ip
    • 一些可修改的系统设置
    • 服务自启
    • 一些查询命令
    • Swap空间
    • 虚拟机磁盘扩展
    • Windows 和 Linux 环境下免密使用 SSH
      • 生成密钥
      • 远程账号有密码
        • Linux
        • Windows PowerShell
      • 远程账号无密码
      • 私钥有密码
        • Linux
        • Windows PowerShell
      • 配置连接别名
      • 登录失败排查
  • docker

  • redis

  • nginx

  • mysql

  • 其他

  • 环境搭建

  • Vibe Coding

  • Git

  • 知识库
  • linux
YAN
2026-08-11
目录

Windows 和 Linux 环境下免密使用 SSH

SSH 免密登录使用公钥认证,与远程账号有没有密码无关。

  • 远程账号有密码:首次通过密码安装公钥;
  • 远程账号无密码:通过控制台或管理员账号安装公钥;
  • 私钥有密码:使用 ssh-agent,解锁一次后无需重复输入。

# 生成密钥

Windows PowerShell 和 Linux 均可使用:

ssh-keygen -t ed25519 -C "设备名称"
  • -t:指定密钥类型;
  • -C:添加密钥备注,注意是大写 C。

直接回车使用默认保存位置。私钥密码留空,可完全免输入;设置密码则更加安全。

生成的文件:

~/.ssh/id_ed25519       私钥,不可泄露
~/.ssh/id_ed25519.pub   公钥,放到服务器

# 远程账号有密码

# Linux

ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 22 user@server_ip
  • -i:指定公钥文件;
  • -p:指定 SSH 端口。

首次输入远程账号密码,之后直接登录:

ssh -p 22 user@server_ip

# Windows PowerShell

Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub" | ssh -p 22 user@server_ip "umask 077; mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys"
  • $env:USERPROFILE:Windows 当前用户目录;
  • |:把公钥内容传给后面的 SSH 命令;
  • mkdir -p:目录不存在时创建,存在时不报错;
  • >>:追加内容,不覆盖已有公钥。

输入一次远程账号密码,之后直接登录:

ssh -p 22 user@server_ip

# 远程账号无密码

无法通过密码完成首次登录时,使用服务器控制台或管理员账号配置。

先在客户端查看并复制公钥。

Linux:

cat ~/.ssh/id_ed25519.pub

Windows PowerShell:

Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub"

在服务器目标账号下执行:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo '粘贴公钥内容' >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

如果由 root 配置,还需修改文件所有者:

chown -R user:user /home/user/.ssh

-R 表示递归修改目录内所有文件。账号还需要具备正常的登录 Shell,且未过期。

# 私钥有密码

私钥密码与远程账号密码不是一回事。使用 ssh-agent 可以避免每次连接都输入私钥密码。

# Linux

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
  • ssh-agent -s:输出当前 Shell 可用的代理配置;
  • ssh-add:将私钥加入代理。

# Windows PowerShell

管理员 PowerShell 执行一次:

Set-Service -Name ssh-agent -StartupType Automatic
Start-Service ssh-agent
  • -Name:指定服务名称;
  • -StartupType Automatic:设置为开机自动启动。

普通 PowerShell 添加私钥:

ssh-add "$env:USERPROFILE\.ssh\id_ed25519"

# 配置连接别名

Linux 配置文件为 ~/.ssh/config,Windows 为 %USERPROFILE%\.ssh\config。

Host my-server
    HostName 192.168.1.100
    User user
    Port 22
    IdentityFile ~/.ssh/id_ed25519

以后直接连接:

ssh my-server

# 登录失败排查

ssh -vvv -i ~/.ssh/id_ed25519 user@server_ip
  • -vvv:输出详细连接日志;
  • -i:指定私钥文件。

重点检查服务器上的权限和所有者:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

如果提示 Enter passphrase for key,表示公钥登录已经生效,只是私钥设置了密码,使用前面的 ssh-agent 即可。

#SSH#Windows#Linux
上次更新: 2026/08/18, 01:07:41
虚拟机磁盘扩展
安装docker

← 虚拟机磁盘扩展 安装docker→

最近更新
01
Gradle 使用指南
05-29
02
Node.js 版本管理与环境隔离
05-29
03
Python 版本管理与环境隔离
05-29
更多文章>
Theme by Vdoing | Copyright © 2022-2026 YAN | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式