在 Ubuntu 中使用 SSH 命令行时,以下是一些实用技巧和进阶操作,能提升效率并增强安全性:
一、基础操作
-
快速连接远程主机
ssh username@remote_host # 默认使用 22 端口 ssh -p 2222 username@remote_host # 指定端口
-
生成 SSH 密钥对
ssh-keygen -t ed25519 # 推荐 ed25519 算法(更安全) ssh-keygen -t rsa -b 4096 # RSA 算法(兼容性更好)
-
上传公钥到远程主机
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@remote_host # 自动添加公钥到远程 ~/.ssh/authorized_keys ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 username@remote_host # 指定端口
二、高效配置
-
SSH 配置文件(~/.ssh/config)
编辑配置文件简化常用连接:Host myserver HostName 192.168.1.100 User ubuntu Port 2222 IdentityFile ~/.ssh/id_ed25519 # 指定私钥路径
之后可直接用
ssh myserver
连接。 -
复用 SSH 连接(减少登录延迟)
在~/.ssh/config
中添加:Host * ControlMaster auto # 启用连接复用 ControlPath ~/.ssh/ssh-%r@%h:%p ControlPersist 1h # 保持连接 1 小时
三、高级功能
-
端口转发
- 本地转发(访问远程内网服务)
ssh -L 8080:localhost:80 username@remote_host # 将远程 80 端口映射到本地 8080
- 远程转发(暴露本地服务到远程)
ssh -R 3306:localhost:3306 username@remote_host # 将本地 MySQL 暴露到远程的 3306 端口
- 动态转发(SOCKS 代理)
ssh -D 1080 username@remote_host # 通过远程主机建立 SOCKS5 代理(浏览器设置代理为 localhost:1080)
- 本地转发(访问远程内网服务)
-
通过跳板机连接内网主机(ProxyJump)
ssh -J username@jump_host username@internal_host # 直接跳转 # 或在配置文件中: Host internal_host HostName 10.0.0.5 ProxyJump username@jump_host
-
执行远程命令并退出
ssh username@remote_host "ls /var/log" # 执行命令后返回本地终端 ssh username@remote_host "sudo systemctl restart nginx" # 执行需权限的命令
四、安全优化
-
禁用密码登录(仅允许密钥)
修改远程主机的/etc/ssh/sshd_config
:PasswordAuthentication no ChallengeResponseAuthentication no
重启服务:
sudo systemctl restart sshd
-
限制登录用户和 IP
在sshd_config
中添加:AllowUsers ubuntu@192.168.1.* # 仅允许特定用户和 IP 段登录
-
使用 Fail2Ban 防暴力破解
sudo apt install fail2ban # 自动屏蔽多次登录失败的 IP
五、调试与故障排查
-
查看详细连接日志
ssh -vvv username@remote_host # 显示完整调试信息(适合排查连接问题)
-
检查密钥指纹
ssh-keygen -l -f ~/.ssh/id_ed25519.pub # 查看本地公钥指纹 ssh-keyscan remote_host # 获取远程主机公钥指纹(验证合法性)
六、其他实用工具
-
通过 SSH 传输文件
scp -P 2222 local_file.txt username@remote_host:/path/ # 上传文件 scp -r username@remote_host:/remote/folder /local/path # 递归下载目录
-
使用
rsync
高效同步rsync -avz -e "ssh -p 2222" /local/path username@remote_host:/remote/path
-
挂载远程目录(sshfs)
sudo apt install sshfs sshfs username@remote_host:/remote/path /local/mount_point # 挂载为本地目录
掌握这些技巧后,你可以更高效、安全地管理远程服务器!