← 返回首页
🔑

SSH远程访问与密钥管理

📂 devops ⏱ 2 min 210 words

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是远程运维的基础工具。配置密钥认证和安全选项,能够提高远程访问的安全性和便利性。