SSH远程访问与密钥管理
SSH远程访问与密钥管理
SSH简介
SSH(Secure Shell)是用于安全远程访问的协议,它通过加密通信保护数据传输。
基本连接
# 基本连接
ssh username@hostname
# 指定端口
ssh -p 2222 username@hostname
# 使用指定密钥
ssh -i ~/.ssh/mykey.pem username@hostname
SSH配置文件
用户配置
# ~/.ssh/config
Host myserver
HostName 192.168.1.100
User admin
Port 22
IdentityFile ~/.ssh/mykey
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
使用配置连接
# 简化连接
ssh myserver
密钥认证
生成密钥对
# 生成RSA密钥
ssh-keygen -t rsa -b 4096
# 生成Ed25519密钥(推荐)
ssh-keygen -t ed25519
# 生成指定名称的密钥
ssh-keygen -t ed25519 -f ~/.ssh/mykey
部署公钥
# 使用ssh-copy-id
ssh-copy-id username@hostname
# 手动部署
cat ~/.ssh/id_ed25519.pub | ssh username@hostname "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
# 设置权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
密钥管理
# 查看密钥指纹
ssh-keygen -lf ~/.ssh/id_ed25519.pub
# 使用ssh-agent管理密钥
eval $(ssh-agent)
ssh-add ~/.ssh/id_ed25519
# 列出已加载的密钥
ssh-add -l
安全配置
服务端配置
# /etc/ssh/sshd_config
# 禁用密码登录
PasswordAuthentication no
# 禁用root直接登录
PermitRootLogin no
# 限制允许登录的用户
AllowUsers admin deploy
# 修改默认端口
Port 2222
# 限制SSH协议版本
Protocol 2
重启SSH服务
# Debian/Ubuntu
sudo systemctl restart ssh
# CentOS/RHEL
sudo systemctl restart sshd
SSH隧道
本地端口转发
# 将本地8080端口转发到远程服务器的80端口
ssh -L 8080:localhost:80 username@hostname
# 浏览器访问localhost:8080即可访问远程80端口
远程端口转发
# 将远程服务器的8080端口转发到本地80端口
ssh -R 8080:localhost:80 username@hostname
动态端口转发(SOCKS代理)
# 创建SOCKS代理
ssh -D 1080 username@hostname
# 配置浏览器使用SOCKS代理
# 地址:127.0.0.1,端口:1080
实践:配置跳板机
# ~/.ssh/config
Host jumpbox
HostName 203.0.113.10
User admin
IdentityFile ~/.ssh/jumpkey
Host internal-*
ProxyJump jumpbox
User admin
IdentityFile ~/.ssh/internalkey
Host internal-web
HostName 192.168.1.100
Host internal-db
HostName 192.168.1.200
# 直接连接内网服务器
ssh internal-web
ssh internal-db
SCP文件传输
# 上传文件
scp localfile.txt username@hostname:/remote/path/
# 下载文件
scp username@hostname:/remote/path/file.txt local/
# 递归复制目录
scp -r localdir/ username@hostname:/remote/path/
# 使用配置
scp file.txt myserver:/tmp/
总结
SSH是远程运维的基础工具。配置密钥认证和安全选项,能够提高远程访问的安全性和便利性。