SSH命令

SSH(Secure Shell)是一种加密网络协议,用于在不安全的网络上安全地操作网络服务。


1. SSH 是什么?

SSH 最初设计用于替代 Telnet 等不安全的远程登录协议。它通过加密技术,确保客户端与服务器之间的连接是安全的,能够防止窃听、连接劫持等攻击。

主要功能:

  • 远程登录(替代 telnet/rlogin)
  • 安全执行远程命令
  • 安全的文件传输(配合 scp、sftp)
  • 端口转发(隧道)、X11 转发等

2. 基本语法

ssh [选项] [用户@]主机 [命令]
  • 用户:远程服务器上的用户名(若不指定,则使用当前本地用户名)
  • 主机:可以是域名、IP 地址,或 SSH 配置文件中定义的别名
  • 命令:如果提供,则在远程执行该命令后退出,不启动交互式 Shell

3. 常用选项

3.1 连接相关

选项说明
-p <端口>指定远程 SSH 端口(默认 22)
-l <用户名>指定登录用户名
-i <私钥文件>指定用于认证的私钥文件
-F <配置文件>指定 SSH 配置文件(默认 ~/.ssh/config
-o <选项>直接传递配置选项(如 -o ConnectTimeout=5

3.2 认证与安全

选项说明
-o PasswordAuthentication=no禁用密码认证,只使用密钥
-o StrictHostKeyChecking=no自动接受未知主机密钥(慎用)
-o UserKnownHostsFile=/dev/null忽略 known_hosts 记录
-v详细输出(用于调试),可用 -vvv 增加详细程度

3.3 转发与隧道

选项说明
-L [本地地址:]本地端口:目标主机:目标端口本地端口转发
-R [远程地址:]远程端口:目标主机:目标端口远程端口转发
-D <端口>动态端口转发(SOCKS 代理)
-X启用 X11 转发(图形界面)
-Y启用可信 X11 转发(安全性较低)
-A启用代理认证转发
-N不执行远程命令(用于端口转发)
-f连接成功后进入后台(常与 -N 配合)

3.4 其他常用

选项说明
-t强制分配伪终端(用于执行需要交互的命令)
-T禁用伪终端分配
-C启用压缩
-4 / -6强制使用 IPv4 / IPv6

4. 配置文件

SSH 客户端配置文件通常位于:

  • 系统级:/etc/ssh/ssh_config
  • 用户级:~/.ssh/config

配置文件可以简化日常使用。示例:

Host myserver
    HostName 192.168.1.100
    User admin
    Port 2222
    IdentityFile ~/.ssh/id_rsa_mykey

之后只需执行 ssh myserver 即可。

常用配置项:

  • Host:别名
  • HostName:真实主机名/IP
  • User:用户名
  • Port:端口
  • IdentityFile:私钥路径
  • ForwardAgent:是否允许代理转发
  • ServerAliveInterval:保活时间间隔
  • Compression:是否启用压缩

5. 密钥认证

SSH 支持使用公钥认证,比密码更安全。

5.1 生成密钥对

ssh-keygen -t ed25519 -C "your_email@example.com"

常用类型:

  • ed25519:推荐,安全性高,性能好
  • rsa(3072 或 4096 位):兼容性最好

生成的文件:

  • ~/.ssh/id_ed25519:私钥(需严格保密)
  • ~/.ssh/id_ed25519.pub:公钥(可分发)

5.2 将公钥部署到服务器

方法一:使用 ssh-copy-id

ssh-copy-id user@host

方法二:手动添加

将公钥内容追加到远程主机的 ~/.ssh/authorized_keys 文件中。


6. 常用操作示例

6.1 基本远程登录

ssh root@192.168.1.10
ssh -p 2222 admin@example.com

6.2 执行单条命令

ssh user@host "ls -la /var/log"
ssh user@host "systemctl status nginx"

6.3 本地端口转发

将远程数据库(3306)映射到本地 3307:

ssh -L 3307:localhost:3306 user@db-server

之后可以连接 localhost:3307 访问远程数据库。

6.4 远程端口转发

将本地 Web 服务(3000)暴露到远程服务器的 8080 端口:

ssh -R 8080:localhost:3000 user@public-server

这样访问 public-server:8080 就相当于访问本地的 3000 端口。

6.5 动态 SOCKS 代理

ssh -D 1080 user@server

然后在浏览器或系统中设置 SOCKS5 代理 localhost:1080,所有流量将通过 SSH 隧道转发。

6.6 跳板机(ProxyJump)

通过一台跳板机登录内部主机:

ssh -J jumpuser@jumphost targetuser@targethost

或在配置文件中使用 ProxyJump 选项。


7. 文件传输相关

虽然 scpsftp 是独立命令,但它们基于 SSH。

7.1 scp 示例

# 本地 -> 远程
scp file.txt user@host:/path/

# 远程 -> 本地
scp user@host:/path/file.txt .

# 指定端口
scp -P 2222 file.txt user@host:/path/

7.2 sftp 示例

sftp user@host

进入交互式 FTP 风格界面,支持 lsgetputmkdir 等命令。


8. 安全建议

  1. 禁用密码认证(生产环境):在服务器 /etc/ssh/sshd_config 中设置 PasswordAuthentication no
  2. 禁用 root 直接登录:设置 PermitRootLogin no
  3. 使用非标准端口:修改 Port,可减少扫描攻击
  4. 限制登录用户:使用 AllowUsers 指令
  5. 定期更新 SSH 软件
  6. 私钥加密存储:生成时设置密码短语(passphrase),可配合 ssh-agent 避免重复输入

9. 故障排查

9.1 查看详细连接过程

ssh -vvv user@host

输出会显示认证方式、密钥尝试、连接建立细节。

9.2 常见错误

错误信息常见原因
Connection refused端口未开放,SSH 服务未运行,或防火墙拦截
Permission denied (publickey)密钥认证失败,可能未添加公钥或私钥错误
Host key verification failed主机密钥变更,可编辑 ~/.ssh/known_hosts 删除对应行
Connection timed out网络不通或防火墙拦截

10. 总结

SSH 是现代 Linux/Unix 系统管理的必备工具。除了基础的远程登录,它还提供了强大的端口转发、隧道、安全传输等能力。掌握 SSH 的各种用法,可以极大提升系统管理的安全性与效率。

如需更深入了解,可以查阅:

man ssh
man ssh_config
man sshd_config
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐子元竟然被占了!!

谢谢同志

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值