外部网络的 SSH 被拒绝

外部网络的 SSH 被拒绝

我在家用电脑(运行 Lubuntu 12.04.1)上安装了 open-ssh-server,以便从学校连接到它。这是我设置 sshd_config 文件的方式:

# Package generated configuration file
# See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for
#Port 22
Port 2222
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes

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

# Logging
SyslogFacility AUTH
#LogLevel INFO
LogLevel VERBOSE

# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes

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

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

# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication yes

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

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

X11Forwarding no
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no

#MaxStartups 10:30:60
#Banner /etc/issue.net
Banner /etc/sshbanner.net

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

Subsystem sftp /usr/lib/openssh/sftp-server

# 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 and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes

#specify which accounts can use SSH
AllowUsers onlyme

我还配置了路由器的端口转发表,其中包括:

  • LAN 端口:2222-2222
  • 协议:TCP
  • LAN IP地址:在系统托盘右键菜单中查看“连接信息”可显示“IP地址”
  • 远程端口[可选]:不适用
  • 远程 IP 地址[可选]:不适用

我还尝试了其他各种配置,使用主 DNS 和辅助 DNS,以及指定远程端口 2222-2222。我还尝试了 TCP/UDP(实际上是两条规则,因为我的路由器需要为每种协议设置单独的规则)。

使用任何路由器端口转发配置,我都可以使用

ssh -p 2222 -v localhost

但是,当我尝试使用

ssh -p 2222 onlyme@IP_ADDRESS 

我收到“无主机路由”消息。当我使用“广播地址”或“默认路由/主 DNS”时,也会出现同样的情况。当我使用“子网掩码”时,ssh 会挂起。但是,当我使用“辅助 DNS”时,我收到“连接被拒绝”消息。

:^(

请有人帮助我弄清楚如何实现这一点。

答案1

一旦您可以从 LAN 内部连接到该机器,其余部分就完全不受该机器上运行的 Ubuntu 的控制。因此问题很可能出在您的 Ubuntu 机器之外。可能的原因可能包括:

  • 路由器上的端口转发配置不正确。请注意,重新启动计算机时,其内部 IP 可能会发生变化,尤其是当您的 LAN 中有多个设备时,这可能取决于从路由器的 DHCP 请求地址的顺序。您可以使用ifconfig控制台中的命令查看您的 IP 地址。

  • 尝试从外部连接时,您使用了错误的 IP(实际上,“没有到主机的路由”消息强烈表明了这一点)。谷歌搜索“我的 IP 是什么”,找到许多网站中的一个,它会告诉您当前的外部 IP 是什么。注意您的外部 IP如果重新启动可能会改变路由器

  • 作为一种“安全措施”,一些提供商会阻止其客户端口的传入连接 - 无论是所有端口还是一系列知名端口。ISP 的控制面板中可能有一些设置,或者您可能需要致电他们来解决这个问题。

因此,调试该问题的方法是:

  • 确保你能从 LAN 内连接
  • 确保使用机器的正确内部 IP 在路由器上正确配置了端口转发
  • 找出你的外部IP
  • 确保你可以 ping 该 IP,用来traceroute查看数据包被阻止的位置
  • 可能尝试配置一些“更简单”的服务转发,例如首先配置 HTTP 以排除身份验证等问题。

(此外,我不确定你为什么提到 DNS 的东西——一切都是通过普通的 IP 地址完成的,DNS 与此完全无关)

答案2

看了你的评论,我觉得问题的一部分是你使用了错误的 IP。DNS 是互联网电话簿,而不是你的外部 IP。转到 Google.com 并在搜索中输入“ip”。Google 会告诉你你的外部 IP。

还可以去图书馆使用其中一台电脑,下载便携式 Putty 客户端这里(运行安装程序并选择桌面作为安装位置,它会将文件提取到文件夹中,然后运行 ​​PuttyPortable.exe)然后使用它尝试连接到您的家用电脑。完成后请确保将其删除,因为大多数图书馆不喜欢您将程序下载到他们的电脑上(但他们无论如何都不会检查)。

还有一些在线 SSH 客户端,它们会为您提供 5 分钟的免费会话,因此您可以从家用电脑上尝试这些客户端。不过,出于安全原因,您可能希望在尝试之前暂时更改密码。

答案3

我终于搞清楚了问题出在哪里:我对 TCP/IP 一无所知。我使用了错误的 IP。由于我的 IP 是动态的,所以我编写了一个脚本将其转储到 Dropbox 文件夹中。这样我就可以从学校检索它并登录。

#!/usr/bin/perl -w

use strict;
use LWP::Simple;

open( OFILE, ">/home/username/Dropbox/home.txt" ) || die "opening file $!";
print OFILE get("http://checkip.dyndns.com/");
close( OFILE );

相关内容