拒绝服务

查看是否存在ssh进程

ps aux | grep sshd

启动时提示

sshd: no hostkeys available -- exiting.

则需要先生成密钥

sudo ssh-keygen -A

再启动

sudo service ssh start

端口代理

ssh -p 49162 -L 0.0.0.0:8000:localhost:8888 root@xxx.xx.x.xx

Note

0.0.0.0表示监听所有地址

SSH 端口转发参数

-L 参数(本地端口转发)

将本地机器的端口映射到远程服务器的端口。格式:

-L [本地地址:]本地端口:目标地址:目标端口

示例:

ssh -L 8000:localhost:8888 user@remote

将本地的8000端口转发到远程服务器的8888端口

原理说明

我们将使用 SSH 本地端口转发 (-L)。它的工作流程如下:

  1. 您在本机上执行一个特殊的 SSH 命令,连接到跳板机

  2. 这个命令会在您的本机上创建一个监听端口(例如 9000)。

  3. 当您访问本机的这个端口 (localhost:9000) 时,SSH 客户端会捕获这个连接请求。

  4. 请求通过加密的 SSH 隧道被发送到**跳板机 **。

  5. 跳板机收到请求后,会以自己的名义,将请求转发给最终的目标服务器

  6. 从目标服务器看来,访问请求就好像是直接从跳板机发来的一样。

用一个简单的图来表示:

[您的电脑] --> [访问 localhost:9000] --> [SSH隧道] --> [跳板机] --> [目标服务器 :9000]

让隧道在后台运行(推荐)

如果不想一直开着一个终端窗口,可以使用 -f-N 参数让 SSH 隧道在后台运行。

  1. 在本机终端中输入以下命令:

    ssh -fN -L 9000:219.216.64.87:9000 root@219.216.64.106

    新增参数解释:

    • -f: fork,表示在后台运行。

    • -N: No command,表示不执行远程命令。这很适合端口转发,因为我们只是想建立隧道,并不想在跳板机上进行操作。

  2. 执行后,它会验证身份,然后立即返回到本地终端提示符,但隧道已经在后台建立并持续运行了。

  3. 您可以像方法一那样,直接在本机访问 localhost:9000

  4. 如何关闭后台隧道?

    需要找到这个 SSH 进程的 PID 并手动结束它。

    # 查找后台的SSH隧道进程
    ps aux | grep "ssh -fN -L"
     
    # 在输出中找到对应的进程ID (PID),然后使用 kill 命令
    kill [PID]

注意事项

极少数情况下,SSH 服务器的配置文件 (/etc/ssh/sshd_config) 中可能会设置 AllowTcpForwarding no 来禁止端口转发。如果上述方法不成功,这会是一个排查点。

-R 参数(远程端口转发)

将远程服务器的端口映射到本地机器的端口。格式:

-R [远程地址:]远程端口:目标地址:目标端口

示例:

ssh -R 8888:localhost:8000 user@remote

将远程服务器的8888端口转发到本地的8000端口