服务器更改后,使用 PuTTY 的 SSH 隧道不再起作用

服务器更改后,使用 PuTTY 的 SSH 隧道不再起作用

编辑(为了澄清)

              Windows Client                  Remote Linux Server
 |----------------------------------|       |---------------------|
 ____________            ____________            ____________  
|            |          |            |          |            | 
| Firefox    | -------> | PuTTY      | -------> | sshd       | ---> (The Internet)
|____________|          |____________|          |____________| 
Network settings:    Interactive SSH Session     sshd_config
Manual Proxy:        (manual login)              posted below 
SOCKS Host:          Configuration Settings:
localhost:9870       Connection|SSH|Tunnels
                     set to D9870

上述配置运行良好,直到我们的 ISP 将服务器更换为新服务器。我说的“运行良好”是指我可以浏览整个互联网,包括通常在中国被屏蔽的网站。当我登录时,它仍然运行良好其他SSH 会话开启其他服务器作为测试(生产 Web 服务器,不是我可以为此使用的服务器)。在所有情况下,手动 SSH 登录均正常工作。

我需要弄清楚为什么它不能与新服务器兼容,因为该服务器的唯一目的就是为我们公司提供此功能。

上一篇帖子

我们的服务器提供商最近更改了我们的服务器和 IP 地址。旧服务器上的硬盘已移至新服务器,除 IP 地址更改外,配置应完全相同。

迁移之前,我在 Windows 机器上使用 PuTTY 作为 SOCKS 代理通过服务器隧道传输网络流量,使用动态端口设置为 9870。迁移后,我重新配置了 PuTTY 以指向新 IP。但隧道不再起作用(在 Firefox 中请求页面时超时)。

我无法访问旧服务器。但新服务器上的 sshd_config 是:

#       $OpenBSD: sshd_config,v 1.73 2005/12/06 22:38:28 reyk Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options change a
# default value.

#Port 22
#Protocol 2,1
Protocol 2
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key

# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 768

# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6

#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile     .ssh/authorized_keys

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication yes

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
GSSAPIAuthentication yes
#GSSAPICleanupCredentials yes
GSSAPICleanupCredentials yes

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication mechanism.
# Depending on your PAM configuration, this may bypass the setting of
# PasswordAuthentication, PermitEmptyPasswords, and
# "PermitRootLogin without-password". If you just want the PAM account and
# session checks to run without PAM authentication, then enable this but set
# ChallengeResponseAuthentication=no
#UsePAM no
UsePAM yes

# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL
#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#ShowPatchLevel no
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10
#PermitTunnel no

# no default banner path
#Banner /some/path

# override default of no subsystems
Subsystem       sftp    /usr/libexec/openssh/sftp-server

编辑:-

到目前为止,我已经尝试了回复中的所有建议。仍然不起作用。托管服务器的数据中心的防火墙是否可能阻止了 ssh 隧道?我已尝试在 PuTTY 中将 D80 作为我的动态端口,但这也不起作用(应该吗?)。该服务器主要是 Web 服务器,但目前我们没有在其上运行任何网站,尽管 Apache 正在运行。

我查看了 putty.log,虽然我看不太懂,但其中有以下部分:

Event Log: Opened channel for session
Event Log: Local port 9870 SOCKS dynamic forwarding
Outgoing packet type 98 / 0x62 (SSH2_MSG_CHANNEL_REQUEST)
  00000000  00 00 00 00 00 00 00 07 70 74 79 2d 72 65 71 01  ........pty-req.
  00000010  00 00 00 05 78 74 65 72 6d 00 00 00 50 00 00 00  ....xterm...P...
  00000020  18 00 00 00 00 00 00 00 00 00 00 00 10 03 00 00  ................
  00000030  00 7f 80 00 00 96 00 81 00 00 96 00 00           .............
Outgoing raw data
  00000000  ed 9b 4d c5 0c 7f c4 67 e7 ad 96 3f 5a fd 26 fb  ..M....g...?Z.&.
  00000010  48 27 cd e9 b9 bd 4f 52 2c e0 d3 4e de 62 5d ab  H'....OR,..N.b].
  00000020  c0 10 51 a9 80 8e 68 9c 6d 4c bf ab 75 e9 e1 7a  ..Q...h.mL..u..z
  00000030  bf 66 e3 ff 6f 94 fe f9 9e 78 3d b5 e0 a6 8c fd  .f..o....x=.....
  00000040  61 5b 69 b4 ec 7c 30 a0 29 87 9c 2c d2 94 57 bd  a[i..|0.)..,..W.
  00000050  6e 4b 9c 6c d0 39 cc 46 66 3c 5d 7d dc 37 76 cf  nK.l.9.Ff<]}.7v.
  00000060  9b c7 24 46                                      ..$F
Incoming raw data
  00000000  30 ae 0c b2 25 a9 c1 73 47 1f 2d 6a 5e 5b 7f 88  0...%..sG.-j^[..
  00000010  99 99 0c 28 ff 87 5b 0e 82 61 f5 33 81 3d 8a 7d  ...(..[..a.3.=.}
  00000020  d6 b7 3d 6f                                      ..=o
Incoming packet type 99 / 0x63 (SSH2_MSG_CHANNEL_SUCCESS)
  00000000  00 00 01 00      ............

在我看来,这似乎像是端口转发已被远程服务器接受。

进一步编辑:-

我尝试使用 PuTTY (D9870) 中完全相同的 SSH 隧道设置连接到我经常通过 SSH 连接的另一台服务器

它立即起作用了(Firefox 将 PuTTY 视为 SOCKS 代理),我立即能够访问在我所在位置 [中国] 被屏蔽的网站。

这次测试最有趣的是netstat -an --inet下面的受访者规定的测试也在服务器上没有显示 127.0.0.1:9870。

我想我需要明确指出,我使用的是 Windows 机器作为 PuTTY/Firefox 客户端。我正尝试使用远程 Linux 服务器来传输网络流量,这样我就可以安全地访问在中国被屏蔽的网站。在我看来,建议的 netstat 测试应该在我的 Windows 机器上运行(在这种情况下,它使用了错误的 netstat 语法)。

答案1

应 rwired 的要求,我重新发布我之前的评论作为答案,内容如下:

远程 Linux 服务器能否与 TCP 端口 80 建立出站连接?例如,如果您从服务器“telnet www.google.com 80”,是否会出现“连接已建立”的信息?还是会挂起?

其本意是某些东西阻塞了出站连接,rwired 发现事实确实如此。

答案2

GatewayPorts yes

在您的 中sshd_config。其默认值为“否”,这将阻止您使用远程端口转发 ( ssh -R) 到远程 SSH 服务器本身以外的任何地址。

答案3

在我看来,您的 sshd_config 看起来不错。也许 sshd 启动时带有附加命令行参数,将 AllowTcpForwarding 设置为 no?如果您在服务器上执行“netstat -an --inet”,它会显示转发的端口吗?您是否确保您的 socks 代理正常工作?

编辑:

netstat 的输出看起来应该像这样:

tcp        0      0 127.0.0.1:9870          0.0.0.0:*               LISTEN 

答案4

首先尝试使用 putty 手动与服务器建立 ssh 连接,从而确保没有服务器 IP 不匹配、MITM 连接预防等,ssh 正在运行,但可能不会在通过 putty 进行的非交互式 ssh 会话中显示。

如果一切正常,那么你必须通过 netstat 查看隧道是否在监听 localhost 端口上的连接,如果没有,我怀疑问题不是出在 ssh 上

作为进一步的调试,您可以启用 Putty 日志记录以便了解问题真正所在。

编辑:在您发布的 Putty 日志中,唯一让我感到好奇的信息是终端... 我的假设是,新服务器无法支持这种“进化的终端”,请尝试将终端降级为古老的 vt100。这很可能是问题所在...

相关内容