SSH 常用命令速查手册

从远程登录、密钥配置到文件传输、端口转发与故障排查。示例中的主机名、用户和路径请替换为自己的实际信息。

1. 连接服务器

最常用的登录方式和连接参数。

基本登录

ssh username@example.com

指定端口、密钥或首次只执行一条命令

ssh -p 2222 username@example.com
ssh -i ~/.ssh/id_ed25519 username@example.com
ssh username@example.com 'uptime && df -h'
参数用途
-p PORT指定服务端端口,默认是 22
-i FILE指定私钥文件
-v / -vv / -vvv输出逐级增加的调试信息
-4 / -6强制使用 IPv4 / IPv6
-C启用压缩,慢速网络可能有帮助
首次连接会显示服务器指纹。应通过可信渠道核对指纹后再输入 yes,不要盲目接受。

2. 配置密钥登录

生成推荐的 Ed25519 密钥

ssh-keygen -t ed25519 -a 100 -C "your_name@example.com"

建议为私钥设置强密码。默认生成 ~/.ssh/id_ed25519(私钥)和 ~/.ssh/id_ed25519.pub(公钥)。

把公钥安装到服务器

ssh-copy-id -i ~/.ssh/id_ed25519.pub username@example.com

若系统没有 ssh-copy-id,可在服务器上将公钥追加至 ~/.ssh/authorized_keys,并设置权限:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

使用 ssh-agent 管理密钥

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
ssh-add -l
私钥绝不能上传、发给他人或写进网页/代码仓库。需要分享的是以 .pub 结尾的公钥。

3. SSH 客户端配置

编辑 ~/.ssh/config,把复杂参数保存成简短别名:

Host myserver
    HostName example.com
    User username
    Port 2222
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60
    ServerAliveCountMax 3

以后只需运行:

ssh myserver

通过跳板机访问内网主机

ssh -J jumpuser@jump.example.com user@10.0.0.8

也可在配置中为目标主机加入 ProxyJump jumpuser@jump.example.com。

4. 文件与目录操作

登录服务器后常用的 Linux 文件管理命令。

查看和切换目录

pwd                      # 显示当前目录
ls -lah                  # 列出文件,含隐藏文件、权限和易读大小
cd /var/www              # 进入指定目录
cd ..                    # 返回上一级目录
cd ~                     # 返回当前用户的主目录
du -sh ./directory       # 查看某个目录的总大小
df -h                    # 查看各文件系统的磁盘空间

创建文件和目录

touch example.txt         # 创建空文件或更新时间戳
mkdir new-directory      # 创建目录
mkdir -p a/b/c           # 连同缺失的父目录一起创建
printf '%s\n' 'hello' > example.txt   # 覆盖写入一行
printf '%s\n' 'world' >> example.txt  # 追加写入一行
> 会清空目标文件后再写入,>> 才是追加。操作重要文件前应先备份。

查看文件内容

cat example.txt           # 输出整个文件,适合较短内容
less example.txt          # 分页查看;按 q 退出,/关键词 搜索
head -n 20 example.txt    # 查看前 20 行
tail -n 20 example.txt    # 查看最后 20 行
tail -f app.log           # 持续查看日志新增内容

复制、移动和重命名

cp source.txt backup.txt          # 复制文件
cp -a source-dir backup-dir      # 保留属性地递归复制目录
cp -i source.txt destination/    # 覆盖前询问
mv old-name.txt new-name.txt     # 重命名
mv -i example.txt /target/path/  # 移动,覆盖前询问

删除文件和目录

rm -i example.txt         # 删除文件,操作前询问
rmdir empty-directory    # 只删除空目录
rm -rI old-directory     # 递归删除目录,批量操作前确认
rm 通常无法撤销。使用 rm -r 前先用 pwd 和 ls 核对位置;避免对变量、通配符或宽泛目录直接执行递归删除。

查找文件与内容

find . -type f -name '*.log'              # 按名称查找文件
find /var/log -type f -mtime -7           # 查找 7 天内修改的文件
grep -n 'error' app.log                    # 显示匹配内容和行号
grep -Rni --exclude-dir=.git 'keyword' .  # 在目录中递归搜索

权限和所有者

chmod 600 private-key       # 仅所有者可读写
chmod 644 document.txt      # 所有者读写,其他人只读
chmod 755 script.sh         # 所有者读写执行,其他人读和执行
chown user:group file.txt   # 更改所有者和用户组(可能需要 sudo)

压缩与解压

tar -czf archive.tar.gz directory/  # 创建 gzip 压缩包
tar -tzf archive.tar.gz             # 先查看压缩包内容
tar -xzf archive.tar.gz             # 解压到当前目录
tar -xzf archive.tar.gz -C /target  # 解压到指定目录
zip -r archive.zip directory/       # 创建 zip(需安装 zip)
unzip archive.zip -d target/        # 解压 zip 到指定目录
解压不熟悉的压缩包前,先列出其内容并确认路径,避免覆盖现有文件或发生路径穿越风险。

5. 文件传输

SCP 上传与下载

# 上传本地文件
scp report.pdf username@example.com:/remote/path/

# 下载远程文件
scp username@example.com:/remote/path/report.pdf ./

# 递归上传目录,并指定 SSH 端口
scp -P 2222 -r ./website username@example.com:/var/www/
注意:ssh 指定端口用小写 -p,而传统 scp 用大写 -P。

SFTP 交互式传输

sftp -P 2222 username@example.com
# 常用子命令:ls、lls、cd、lcd、get、put、mkdir、exit

Rsync 增量同步

rsync -avz --progress -e "ssh -p 2222" ./local-dir/ username@example.com:/remote-dir/
rsync --delete 会删除目标端多余文件;使用前先加 --dry-run 预演并确认范围。

6. 端口转发与代理

本地转发:从本机访问远端网络服务

# 打开 localhost:8080,即访问服务器侧的 127.0.0.1:80
ssh -N -L 8080:127.0.0.1:80 username@example.com

远程转发:把本地服务暴露给远端

# 服务器的 9000 端口转发至本机的 3000 端口
ssh -N -R 9000:127.0.0.1:3000 username@example.com

动态转发:建立 SOCKS5 代理

ssh -N -D 1080 username@example.com

-N 不执行远程命令-f 转入后台-L 本地转发-R 远程转发-D 动态代理

转发可能绕过网络访问边界,只应在获得授权的网络和服务器上使用。

7. 会话与效率技巧

操作用法
安全退出exit 或按 Ctrl+D
卡死时强制断开先按回车,再依次按 ~.
列出 SSH 转义命令先按回车,再依次按 ~?
保持长期任务远端使用 tmux 或 screen,避免网络断开导致任务终止

连接复用(放入 ~/.ssh/config)

Host *
    ControlMaster auto
    ControlPath ~/.ssh/control-%C
    ControlPersist 10m

8. 服务端常用管理命令

# 查看服务状态(发行版的服务名可能是 ssh 或 sshd)
sudo systemctl status sshd

# 修改配置前先备份
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

# 检查配置语法,成功时通常无输出
sudo sshd -t

# 平滑重载配置
sudo systemctl reload sshd

查看近期日志

sudo journalctl -u sshd --since "30 minutes ago"
# Debian/Ubuntu 也常见:sudo tail -f /var/log/auth.log
# RHEL/CentOS 也常见:sudo tail -f /var/log/secure
修改端口、认证或防火墙前,务必保留一个已登录的管理会话;另开窗口验证新连接成功后再退出旧会话,防止把自己锁在服务器外。

9. 常见故障排查

现象检查方向
Connection timed outIP/域名、网络路由、安全组、防火墙、端口是否开放
Connection refusedSSH 服务是否启动、端口是否正确、服务是否监听对应地址
Permission denied用户名、私钥、公钥安装、文件权限、服务端认证设置
主机指纹变更警告先确认服务器是否重装或密钥轮换,警惕中间人攻击;确认后再清理旧记录
连接经常断开配置 ServerAliveInterval,检查网络/NAT 超时和服务端日志

输出详细握手过程

ssh -vvv username@example.com

确认后删除某主机的旧指纹

ssh-keygen -R example.com
ssh-keygen -R '[example.com]:2222'

10. 安全建议

  • 优先使用密钥认证,并为私钥设置密码;妥善备份私钥。
  • 日常使用普通账号,需要管理操作时再通过 sudo 提权。
  • 确认密钥登录可靠后,可按组织策略关闭密码登录和直接 root 登录。
  • 限制允许登录的用户与来源 IP,结合防火墙、安全组和登录审计。
  • 及时更新 OpenSSH;敏感环境考虑多因素认证和集中式访问管理。
  • 不要在命令历史、脚本、聊天记录或代码仓库中保存明文密码。
命令示例默认面向 Linux/macOS 的 OpenSSH。Windows 10/11 的 PowerShell 通常也可使用内置 ssh、scp 和 sftp,但路径写法有所不同。