目录
01 简介
ssh 就是一个能让你安全登录并命令行操作远程计算机的加密协议。
1.1 功能与服务
- 远程管理服务器:安全地操作位于机房、云端或本地网络中的服务器或计算机。
- 安全传输文件:借助 SFTP 或 SCP 协议,在机器间加密地传输文件。
- 端口转发:构建加密隧道,安全地访问受保护网络内部的服务。
1.2 OpenSSH套件
OpenSSH(OpenBSD Secure Shell)软件包中提供以下功能:
- ssh - 安全的远程登录
- scp - [SSH] scp:基于 SSH 的安全文件传输
- sftp - [SSH] sftp: 基于SSH的交互式文件传输工具
- ssh-keygen - SSH 密钥生成器
- ssh-copy-id - 公钥复制工具
02 基础使用
2.1 基础登录操作
2.1.1 默认登录
# 基本语法:使用默认端口22登录
ssh [用户名]@[服务器地址]
# 示例
ssh admin@192.168.1.100
ssh root@example.com
2.1.2 指定端口
# 使用 -p 参数指定非标准端口
ssh [用户名]@[服务器地址] -p [端口号]
# 示例
ssh user@example.com -p 2222
ssh admin@192.168.1.100 -p 2024
2.1.3 连接调试选项
# 详细模式,显示连接过程,便于调试(推荐级别)
ssh -v [用户名]@[服务器地址]
# 更详细的调试信息(用于复杂问题排查)
ssh -vvv [用户名]@[服务器地址]
# 示例
ssh -v user@example.com
ssh -vvv user@example.com -p 2222
2.1.4 网络连接选项
# 强制使用 IPv4
ssh -4 [用户名]@[服务器地址]
# 强制使用 IPv6
ssh -6 [用户名]@[服务器地址]
# 设置连接超时时间(秒)
ssh -o ConnectTimeout=10 [用户名]@[服务器地址]
# 防止连接断开:每60秒发送保活包
ssh -o ServerAliveInterval=60 [用户名]@[服务器地址]
# 组合使用示例
ssh -4 -o ConnectTimeout=15 -o ServerAliveInterval=30 user@example.com -p 2222
2.2 登录方式
2.2.1 密码登录
默认使用密码登录,登录后等待提示输入密码。
2.2.2 密钥
也可以使用密钥登录,可以避免每次输入密码的麻烦,并且方便使用
- 生成密钥对
如果本地还没有密钥对,可以使用以下命令生成一个密钥对:
ssh-keygen -t rsa -b 4096
这会在 ~/.ssh/ 目录下生成 id_rsa(私钥)和 id_rsa.pub(公钥)。
- 公钥上传服务器
使用一下命令可以直接
ssh-copy-id -i ~/.ssh/id_rsa.pub username@server_address
- 免密登录
随后的登录就无需再输入密码
03 端口转发功能
SSH端口转发是一种强大的网络隧道技术,允许通过加密的SSH连接传输其他网络协议的数据。
3.1 本地端口转发
将远程服务器的端口映射到本地计算机,访问本地端口就可以访问远程对应端口
# 语法:ssh -L [本地端口]:[目标主机]:[目标端口] [用户名]@[SSH服务器]
# 示例1:通过跳板机访问内网Web服务(后台运行+保活)
# -f: 后台运行,释放终端
# -N: 仅端口转发,不执行远程命令
# -o ServerAliveInterval=60: 每60秒发送保活包
ssh -f -N -o ServerAliveInterval=60 -L 8080:192.168.1.50:80 user@jumpserver.com
# 访问 http://localhost:8080 即可访问内网的192.168.1.50:80
# 示例2:访问远程数据库(详细保活配置)
# -o ServerAliveInterval=30: 每30秒保活一次
# -o ServerAliveCountMax=5: 连续5次失败才断开(约2.5分钟)
# -o TCPKeepAlive=yes: 启用TCP层保活
ssh -f -N -o ServerAliveInterval=30 -o ServerAliveCountMax=5 -o TCPKeepAlive=yes -L 3306:localhost:3306 admin@dbserver.com
# 本地连接 localhost:3306 即可访问远程数据库
# 示例3:开发调试(交互式+保活)
# 无-f参数:保持前台运行,便于查看日志
# -v: 显示详细连接信息
ssh -v -o ServerAliveInterval=45 -L 5432:db-server:5432 developer@dev-host.com
3.2 远程端口转发
将本地计算机端口映射到远程服务器,让远程机器可以通过对应端口访问本地端口
# 语法:ssh -R [远程端口]:[目标主机]:[目标端口] [用户名]@[SSH服务器]
# 示例1:将本地Web服务暴露给外网(后台保活)
# -f -N: 后台运行,仅端口转发
# -o ServerAliveInterval=60: 防止连接超时
# -o ExitOnForwardFailure=yes: 转发失败时立即退出
ssh -f -N -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -R 8080:localhost:80 user@remoteserver.com
# 在remoteserver.com上访问 localhost:8080 即可访问你本地的Web服务
# 示例2:让同事访问你本地的开发环境(稳定版本)
# -o ConnectTimeout=10: 连接超时10秒
# -o ServerAliveInterval=30: 更频繁的保活检测
ssh -f -N -o ServerAliveInterval=30 -o ConnectTimeout=10 -R 9000:localhost:3000 dev@team-server.com
# 示例3:多服务暴露(组合保活参数)
# 同时转发多个端口,适用于完整开发环境
ssh -f -N -o ServerAliveInterval=45 -o ServerAliveCountMax=3 -R 3000:localhost:3000 -R 3001:localhost:3001 -R 8080:localhost:8080 dev@review-server.com
3.3 动态端口转发
创建SOCKS代理服务器,实现灵活的流量转发。
# 语法:ssh -D [本地端口] [用户名]@[SSH服务器]
# 示例1:创建SOCKS5代理(后台保活)
# -f -N: 后台运行代理服务
# -o ServerAliveInterval=60: 保持代理连接稳定
# -C: 启用压缩,提高传输效率
ssh -f -N -C -o ServerAliveInterval=60 -D 1080 user@proxyserver.com
# 配置浏览器使用 SOCKS5 代理 localhost:1080
# 所有网络流量都会通过SSH服务器转发
# 示例2:共享代理服务(网络级别)
# -D 0.0.0.0:1080: 绑定到所有网络接口
# -o GatewayPorts=yes: 允许远程连接(需服务器支持)
ssh -f -N -o ServerAliveInterval=45 -o GatewayPorts=yes -D 0.0.0.0:1080 user@proxyserver.com
# 允许同一网络下的其他设备使用此代理
# 示例3:高稳定性代理配置
# 多重保活机制,适合不稳定的网络环境
ssh -f -N -C -o ServerAliveInterval=30 -o ServerAliveCountMax=10 -o TCPKeepAlive=yes -D 1080 user@vpn-server.com
3.4 组合设置
# 组合示例1:完整的开发环境隧道(本地+远程转发)
# -L: 访问远程数据库
# -R: 暴露本地开发服务
# 综合保活参数确保长时间稳定运行
ssh -f -N \
-o ServerAliveInterval=30 \
-o ServerAliveCountMax=5 \
-o TCPKeepAlive=yes \
-L 3306:db-server:3306 \
-R 3000:localhost:3000 \
developer@workspace-host.com
# 组合示例2:生产环境跳板机(多重本地转发)
# 同时访问多个内网服务
# 严格的超时和保活设置
ssh -f -N \
-o ServerAliveInterval=60 \
-o ConnectTimeout=15 \
-o ConnectionAttempts=3 \
-L 8080:web-app:80 \
-L 5432:database:5432 \
-L 9200:elasticsearch:9200 \
admin@bastion-host.com
# 组合示例3:调试模式(前台运行)
# 无-f参数,保持前台运行查看日志
# -v: 详细输出,便于排查问题
ssh -v -o ServerAliveInterval=45 -L 8080:target-server:80 user@gateway.com
3.5 安全配置
# 限制绑定地址(只允许本机访问)
ssh -L 127.0.0.1:8080:target:80 user@server.com
# 允许其他设备访问(谨慎使用)
ssh -L 0.0.0.0:8080:target:80 user@server.com