学习中心/工程实践/Linux/Linux 9:钥匙、跳板、拷文件

· Linux · 9 · SSH

Linux 9:钥匙、跳板、拷文件

authorized_keys、ProxyJump、rsync、隧道。关密码之前留一条后路。

正在加载录音…

钥匙比密码稳

SSH 是远程干活的门。这一块走完,你该能用钥匙登录、跳板、拷文件、开隧道,并且在关密码登录之前确认自己不会被锁在外面。私钥不进聊天、不进 Git、不进备份包的明文。

  1. 造钥匙ssh-keygen
  2. 放公钥authorized_keys
  3. 跳 / 拷ProxyJump / rsync
  4. 关密码先确认能进

1. 本机造钥匙

  • 造
    要口令就设。空着也能用,笔记本丢了更危险ssh-keygen -t ed25519 -C "you@example.com" -f ~/.ssh/id_ed25519
  • 看
    目录应是 700,私钥 600,公钥 644ls -l ~/.ssh

私钥 ~/.ssh/id_ed25519,公钥是同名 .pub。只把 .pub 给服务器。一台电脑一把常用钥匙够了,服务器不要共用你的私钥。

2. 公钥放到服务器

  • 放
    还需要密码的那一次ssh-copy-id -i ~/.ssh/id_ed25519.pub user@203.0.113.10
  • 登
    通了再往下ssh -i ~/.ssh/id_ed25519 user@203.0.113.10

没有 ssh-copy-id,就手工把公钥追加进服务器 ~/.ssh/authorized_keys。那一侧:.ssh 目录 700,authorized_keys 600。权限太松,sshd 会直接忽略钥匙。

3. 给机器起短名字

本机 ~/.ssh/config:

  • 写
    下面几行是示例,按行写进 ~/.ssh/configHost vps
  • 写
    地址或 DNS HostName 203.0.113.10
  • 写
    远程用户名 User user
  • 写
    用哪把私钥 IdentityFile ~/.ssh/id_ed25519

之后 ssh vps 即可。IdentitiesOnly yes 避免 ssh-agent 里太多钥匙试到被服务器踢。

4. 钥匙进 agent

  • 加
    这一次登录会话里不用反复输私钥口令ssh-add ~/.ssh/id_ed25519
  • 看
    agent 里有哪些ssh-add -l

5. 拷文件

  • 拷
    单个文件够用scp ./notes.tar.gz vps:/tmp/
  • 同步
    目录用 rsync。先空跑rsync -a --dry-run ./site/ vps:/var/www/site/

从服务器拉回来,把方向反过来。大文件、排除 node_modules,rsync 比 scp 合适。

6. 跳板

内网机器不能从笔记本直连时,先到堡垒机,再进内网。config 里:

  • 写
    内网那一台Host inner
  • 写
    内网地址 HostName 10.0.0.12
  • 写
    经 vps 跳。老写法是 ProxyCommand ProxyJump vps

7. 隧道

  • 转
    本机 18080 转到服务器上的 8080。-N 不打开 shellssh -N -L 18080:127.0.0.1:8080 vps

数据库、管理后台只听 127.0.0.1 时用这个。用完关掉。不要把生产库端口暴露到 0.0.0.0。

8. 关密码之前

钥匙多次登录都稳了,再改服务器。sshd 的配置在 /etc/ssh/sshd_config 或 sshd_config.d。改完:

  • 查
    配置语法。错了先别重启sudo sshd -t
  • 重载
    有的发行版服务名是 sshsudo systemctl reload sshd
  • PasswordAuthentication no:关密码。先留一个已登录的窗口。
  • PermitRootLogin no:root 不直接 SSH。用普通用户再 sudo。
  • 主机密钥变了,ssh 会拒绝连。确认是你重装过,再 ssh-keygen -R 那台地址。
  • fail2ban 或云厂商的安全组,防的是扫密码。钥匙开了,仍要把 22 的来源收窄。

这块过关:能跳、能拷、能开隧道,关密码之前还有第二条路。下一篇让服务开机自己起来。

同模块

工程实践 →