ssh-keygen配免密登录,还有个config文件宝藏

举报
yd_264617019 发表于 2026/11/05 11:10:06 2026/11/05
【摘要】 每天ssh要输密码、scp也要输,服务器一多密码还各不相同。配了密钥加SSHconfig后,登录变成sshprod三个字母的事,PortForwarding、跳板、别名全部文件化。这大概是投入十分钟回报最高的一项配置。密钥生成与分发#现代算法ed25519,命名区分用途ssh-keygen-ted25519-C"admin@workstation"-f~/.ssh/id_...

每天ssh要输密码、scp也要输,服务器一多密码还各不相同。配了密钥加SSH config后,登录变成ssh prod三个字母的事,Port Forwarding、跳板、别名全部文件化。这大概是投入十分钟回报最高的一项配置。

密钥生成与分发

# 现代算法ed25519,命名区分用途
ssh-keygen -t ed25519 -C "admin@workstation" -f ~/.ssh/id_ed25519_work

# 把公钥装到服务器(等价于手动追加authorized_keys)
ssh-copy-id -i ~/.ssh/id_ed25519_work.pub ubuntu@203.0.113.10

私钥留在本机(可加passphrase配合ssh-agent),服务器只存公钥。登录时服务器用公钥发起挑战,本机用私钥应答,密码从此退出流程。权限要对:~/.ssh目录700、authorized_keys 600、私钥600,权限松了sshd会直接拒绝(这是「配了密钥还要密码」的头号原因)。

config文件:别名仓库

~/.ssh/config把所有连接参数收编:

# 通用默认
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3
    Compression yes

# 生产跳板机
Host jump
    HostName 203.0.113.10
    User ubuntu
    IdentityFile ~/.ssh/id_ed25519_work

# 内网机器,经由跳板
Host prod-web1
    HostName 10.0.1.11
    User deploy
    ProxyJump jump

# 带端口的数据库机
Host db
    HostName 203.0.113.88
    Port 2222
    User admin
    LocalForward 15432 127.0.0.1:5432

之后ssh prod-web1直达内网机器,ssh db顺带把远端5432转到本地15432,psql连localhost:15432即可。scp/rsync/git全部吃这些别名:rsync -av dist/ prod-web1:/srv/app/。

服务器侧的加固

密钥通了之后,密码登录就该关了:/etc/ssh/sshd_config里PasswordAuthentication no、PermitRootLogin prohibit-password,重载sshd前先开个备用会话防手滑锁死。fail2ban配上,日志里每天几千次爆破扫描是常态。

GitHub/GitLab也用同一套:再生成一把钥匙加到账号,公司账号和个人账号在config里按Host区分IdentityFile,互不干扰。

排错速查

ssh -v target看详细握手过程,卡在哪一步一目了然; Permission denied (publickey)先查服务器端权限和authorized_keys内容;连接超时查安全组/防火墙端口。把-vvv的输出留在手边,SSH的问题它基本都会自己说出来。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。