SSH:ssh 服务器上没有 shell 的隧道

SSH:ssh 服务器上没有 shell 的隧道

我必须在两台主机之间建立隧道。

为此,我ssh以这种方式使用:

ssh -L MY_LOCAL_PORT:FOREIGN_ADDRESS:FOREIGN_PORT MYUSER@SSH_SERVER

之后,我登录到我的 SSH_SERVER。

我怎样才能避免这个功能?!我只需建立一条隧道。我不必登录我的 SSH_SERVER...

我尝试过 -N 选项,但它让我的 shell 很忙。

答案1

正如其他帖子中所述,如果您不希望远程主机上出现提示,则必须使用-NSSH 选项。但这只是让 SSH 在没有提示的情况下保持运行,并且 shell 很忙。

您只需将 SSH 作为后台任务并使用以下&符号即可:

ssh -N -L 8080:ww.xx.yy.zz:80 user@server &

这将在后台启动 ssh 隧道。但可能会出现一些消息,特别是当您尝试连接到非侦听端口时(如果您的服务器 apache 未启动)。为了避免在执行其他操作时在 shell 中生成这些消息,您可以将 STDOUT/STDERR 重定向到大 void :

ssh -N -L 8080:ww.xx.yy.zz:80 user@server >/dev/null 2>&1 & 

享受 SSH 带来的乐趣。

答案2

-f -N是您正在寻找的:

ssh -f -N -L MY_LOCAL_PORT:FOREIGN_ADDRESS:FOREIGN_PORT MYUSER@SSH_SERVER

来自ssh手册页:

-F请求 ssh 在命令执行之前进入后台。如果 ssh 要求输入密码或密码短语,但用户希望它在后台运行,那么这非常有用。这意味着-n

-N不要执行远程命令。这对于仅转发端口很有用(仅限协议版本 2)。

-n重定向标准输入/dev/null(实际上,防止从标准输入读取)。ssh在后台运行时必须使用此功能。

答案3

这是我使用 ssh 从远程计算机连接没有静态 IP 地址的计算机的经验。这是管理没有静态 IP 的服务器(在 LAN 中提供服务)中的项目所必需的

设置和演示的要求:

  • Linux 中带有静态 IP 的 ssh 服务器(称之为 boss.com )
  • Linux 中的 ssh/web 服务器没有静态 IP。 (称之为目标)
  • 带有 JuiceSSH 的 Linux / Android 手机

确保以下内容在/etc/ssh/sshd_config
GatewayPorts yes

在目标计算机中运行以下命令以使用 boss.com:1008 作为目标的网址

ssh -R 1008:127.0.0.1:80 [email protected]

现在您可以从任何设备将目标 Web 服务器设置为 boot.com:1008(尝试使用移动设备上的浏览器)

在目标计算机中运行以下命令通过 ssh 连接目标计算机(在 2048 端口)

ssh -R 1008:127.0.0.1:2048 [email protected]

现在您可以使用以下命令超出目标计算机

ssh [email protected]:1008

或者使用 Android 手机上的 JuiceSSH 进行测试

使用 root 密码访问服务器不是一个好主意。

Create user mytunnel in boss.com
replace root with mytunnel in above examples

最后执行以下操作以确保 mytunnel 用户只能通过 boss.com 进行隧道工作

  • 在 boss.com 的 /etc/passwd 中,将 mytunnel 的 shell 从 /bin/bash 替换为 /bin/false

  • 在上面的命令中添加 -f -N
    ssh -f -N -R 1008:127.0.0.1:80 [email protected]
    ssh -f -N -R 1008:127.0.0.1:2048 [email protected]

  • 现在,用户我的隧道只能使用服务器的 ssh 隧道功能

相关内容