拒绝服务
查看是否存在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.xxNote
0.0.0.0表示监听所有地址
SSH 端口转发参数
-L 参数(本地端口转发)
将本地机器的端口映射到远程服务器的端口。格式:
-L [本地地址:]本地端口:目标地址:目标端口示例:
ssh -L 8000:localhost:8888 user@remote将本地的8000端口转发到远程服务器的8888端口
原理说明
我们将使用 SSH 本地端口转发 (-L)。它的工作流程如下:
-
您在本机上执行一个特殊的 SSH 命令,连接到跳板机。
-
这个命令会在您的本机上创建一个监听端口(例如
9000)。 -
当您访问本机的这个端口 (
localhost:9000) 时,SSH 客户端会捕获这个连接请求。 -
请求通过加密的 SSH 隧道被发送到**跳板机 **。
-
跳板机收到请求后,会以自己的名义,将请求转发给最终的目标服务器。
-
从目标服务器看来,访问请求就好像是直接从跳板机发来的一样。
用一个简单的图来表示:
[您的电脑] --> [访问 localhost:9000] --> [SSH隧道] --> [跳板机] --> [目标服务器 :9000]
让隧道在后台运行(推荐)
如果不想一直开着一个终端窗口,可以使用 -f 和 -N 参数让 SSH 隧道在后台运行。
-
在本机终端中输入以下命令:
ssh -fN -L 9000:219.216.64.87:9000 root@219.216.64.106新增参数解释:
-
-f:fork,表示在后台运行。 -
-N:No command,表示不执行远程命令。这很适合端口转发,因为我们只是想建立隧道,并不想在跳板机上进行操作。
-
-
执行后,它会验证身份,然后立即返回到本地终端提示符,但隧道已经在后台建立并持续运行了。
-
您可以像方法一那样,直接在本机访问
localhost:9000。 -
如何关闭后台隧道?
需要找到这个 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端口