我必须在两台主机之间建立隧道。
为此,我ssh
以这种方式使用:
ssh -L MY_LOCAL_PORT:FOREIGN_ADDRESS:FOREIGN_PORT MYUSER@SSH_SERVER
之后,我登录到我的 SSH_SERVER。
我怎样才能避免这个功能?!我只需建立一条隧道。我不必登录我的 SSH_SERVER...
我尝试过 -N 选项,但它让我的 shell 很忙。
答案1
正如其他帖子中所述,如果您不希望远程主机上出现提示,则必须使用-N
SSH 选项。但这只是让 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 隧道功能