ssh-keygen配免密登录,还有个config文件宝藏
每天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的问题它基本都会自己说出来。
- 点赞
- 收藏
- 关注作者
评论(0)