SSH命令与配置
来源
原始文档: ssh.md
核心内容
SSH 安全外壳协议的实用命令和高级配置,包括代理、端口转发和安全加固。
SSH代理功能
本地端口转发
# 将远程端口映射到本地
ssh -L 1088:localhost:6666 user@host
# SOCKS5 代理(动态端口转发)
ssh -D 1088 root@host
# 后台运行,不启动shell
ssh -fND 1088 root@host
# -g 参数允许外部主机访问
ssh -L 1088:localhost:6666 user@host -g
反向代理(内网穿透)
# 建立A到B的反向代理
ssh -fCNR 7280:localhost:22 root@remote-server
# 在B服务器建立正向代理做端口转发
ssh -fCNL *:1234:localhost:7280 localhost
同一主机端口转发
ssh -fCNL "*:5518:localhost:7280" localhost
autossh 守护进程
systemd 服务配置
方法1: 基础配置
[Unit]
Description=AutoSSH tunnel service
Wants=network-online.target
After=network.target network-online.target ssh.service
[Service]
Environment="AUTOSSH_GATETIME=0"
User=USERNAME
ExecStart=/usr/bin/autossh -M 0 -N -q -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -L localIp:localPort:remoteIp:remotePort user@host
ExecStop=/bin/kill $MAINPID
[Install]
WantedBy=multi-user.target
方法2: 反向隧道
[Unit]
Description=AutoSSH reverse tunnel
After=network-online.target
Wants=network-online.target
[Service]
User=fsz
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -N -R 2222:localhost:22 user@host
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
进程管理
# 查看服务日志
journalctl -u auto-ssh-tunnel.service
# 一键杀死所有 autossh
ps -aux | grep autossh | grep -v grep | awk '{print $2}' | xargs sudo kill
# 温和终止
sudo pkill autossh
# 强制终止
sudo pkill -9 autossh
登录日志检查
# 查看失败登录
grep "Failed password" /var/log/auth.log
# 查看成功登录
grep "Accepted password" /var/log/auth.log
环境变量加载
# 从 .env 文件加载
export $(cat .env | xargs)
# 跳过注释和空行
export $(grep -v '^#' .env | xargs)
组权限管理
# 查看 adm 组成员
grep ^adm: /etc/group
# 添加用户到 adm 组(查看日志)
sudo usermod -aG adm 用户名
newgrp adm
# 从 adm 组移除用户
sudo gpasswd -d 用户 adm
scp 命令
# 指定端口传输
scp -P 2233 fileName server@hostname:path
注意:
-P参数必须紧跟scp,不能放在末尾
关键要点
-f后台运行,-N不执行远程命令,-C压缩数据- autossh 自动重连,适合长期隧道
newgrp不退出终端即可切换有效用户组- 结合 Fail2Ban 可增强 SSH 安全性
相关实体
- SSH - 安全外壳协议
- autossh - SSH 自动重连工具
- 端口转发 - 网络端口转发技术
- systemd - 系统服务管理