SSH 操作指南

基本连接

命令 / 配置说明
ssh user@host以指定用户连接到远程主机
ssh user@host -p 2222连接到非默认端口的远程主机
ssh -i ~/.ssh/key user@host使用指定私钥文件连接
ssh -o StrictHostKeyChecking=no host首次连接跳过主机密钥确认
ssh -v user@host调试模式连接,查看详细握手过程
ssh host "cmd"在远程主机执行单条命令后退出
ssh -X user@host启用 X11 转发,可在远程运行 GUI 程序
ssh -t user@host "cmd"分配伪终端,用于在远程运行交互式命令

密钥管理

命令 / 配置说明
ssh-keygen -t ed25519生成 Ed25519 密钥对(推荐)
ssh-keygen -t rsa -b 4096生成 4096 位 RSA 密钥对
ssh-keygen -t ed25519 -C "email"生成带注释的密钥(标识用途)
ssh-copy-id user@host将公钥复制到远程主机(免密登录)
ssh-copy-id -i ~/.ssh/key.pub user@host指定公钥文件复制到远程
ssh-keygen -l -f ~/.ssh/id.pub查看公钥指纹
ssh-keygen -p修改私钥的 passphrase
eval "$(ssh-agent)" && ssh-add启动 ssh-agent 并添加私钥

端口转发 / 隧道

命令 / 配置说明
ssh -L 8080:localhost:80 host本地端口转发:访问本地 8080 转发到远程 80
ssh -L 8080:db:3306 host本地端口转发:通过跳板机访问远程数据库
ssh -R 8080:localhost:80 host远程端口转发:让远程 8080 转发到本地 80
ssh -D 1080 host动态端口转发:创建 SOCKS5 代理(端口 1080)
ssh -N -L 8080:db:3306 host仅做转发不执行远程 shell(后台隧道)
ssh -f -N -L 8080:db:3306 host将隧道放入后台运行

SCP 文件传输

命令 / 配置说明
scp file user@host:/path上传单个文件到远程主机
scp -r dir/ user@host:/path递归上传整个目录
scp user@host:/path/file .从远程主机下载文件
scp -P 2222 file user@host:/path指定端口上传文件(大写 P)
scp -i key file user@host:/path使用指定密钥上传文件
scp -C file user@host:/path传输时启用压缩

SSH 配置(~/.ssh/config)

命令 / 配置说明
Host alias\n HostName ip\n User user\n Port 22为主机定义别名和连接参数
Host *\n IdentityFile ~/.ssh/id_ed25519全局默认使用指定密钥
Host jump\n ProxyJump bastion通过跳板机连接目标主机
ControlMaster auto\nControlPath ~/.ssh/%r@%h:%p启用连接复用,减少连接延迟
ServerAliveInterval 60每 60 秒发送心跳保活连接
chmod 600 ~/.ssh/config设置配置文件权限(必须)

安全建议

命令 / 配置说明
PasswordAuthentication no禁用密码登录,仅允许密钥认证
PermitRootLogin no禁止 root 用户直接 SSH 登录
Port 2222修改默认 SSH 端口,减少被扫描风险
AllowUsers user1 user2仅允许指定用户 SSH 登录
MaxAuthTries 3限制最大认证尝试次数
Fail2Ban使用 Fail2Ban 自动封禁多次失败登录的 IP
ssh-keygen -l -f /etc/ssh/ssh_host_*查看服务器主机密钥指纹
ssh -o IdentitiesOnly=yes -i key host仅使用指定密钥,防止 agent 中其他密钥干扰