问题描述
我在同一台路由器后面有两台电脑。我们称他们为A和B.
A可以通过以下方式SSH到B:ssh usr@<internal ip of computer>
B可以通过相同的方式SSH到A,但必须使用外部IP。我已经将我的路由器的端口22转发到了计算机A的IP,所以这一切都对我有意义。
但是,我还希望将端口26转发到计算机B,并使用外部IP从网络外部转发SSH,但是指定端口22或26,以有效地选择要使用的计算机。
我尝试在A和B的输入上允许端口26通过iptables
的OUTPUT,但这似乎不起作用。我还将端口26转发到B的内部IP(通过路由器),就像我用22做的那样。
这是我尝试使用外部IP和端口26从A连接到B时得到的信息:
ssh: connect to host xx.xx.xxx.xx port 26: Connection refused.
版本:
-
A = OpenSSH_5.9p1 Debian-5ubuntu1,OpenSSL 1.0.1 2012年3月14日
-
B = OpenSSH_6.0p1 Debian-4,OpenSSL 1.0.1c 2012年5月10日
A有12.04 Ubuntu,B是带有Raspbian的Raspberry Pi。
编辑:我忘记放入的东西:我确实尝试切换SSH配置文件(我发现它是/etc/ssh/ssh_config
)我取消注释(删除#
)与Port
的行并将22
更改为26
。它还给了我拒绝连接的消息。 (我重新启动无济于事。)
最佳解决办法
看起来你没有在第二台机器上的端口26上运行SSH。您可以将该计算机上的端口号更改为26。
编辑/etc/ssh/sshd_config
&不要忘记重新启动SSH或将其保留在22,但将路由器上的端口26转发到第二台机器上的端口22。另外,不要忘记更改第二台计算机上的任何防火墙设置以允许连接。
次佳解决办法
如果您使用的是Linux系统,并且希望连接到端口26上的SSH服务器,则可以使用以下命令。
ssh user@192.168.1.1 -p 26
注意:
-
将服务器IP替换为服务器的IP地址或DNS名称。
-
根据您的设置更改您的端口号。
-
如果您使用自定义端口SSH,那么大多数允许相同端口用于防火墙上的出站,入站连接,否则连接将无法建立
第三种解决办法
我只使用端口22进行内部网ssh访问。
要通过互联网访问我使用自定义(不寻常)端口。这有利于我减少脚本孩子产生的负载,他们正在扫描端口22的“众所周知的用户名”
外部sshd进程由xinetd
控制,并与内部sshd进程并行运行。在以下示例中,我使用端口12345.您可以将其更改为系统上任何可用的空闲端口号。也许更高的值会使“快速端口扫描”扫描此端口的可能性更小。
xinetd
配置为:
service ssh-external
{
socket_type = stream
wait = no
protocol = tcp
type = UNLISTED
user = root
server = /usr/sbin/sshd
server_args = -i -f /etc/ssh/external-sshd.config
port = 12345
log_on_failure += USERID
}
文件/etc/ssh/external-ssdh.config
可以是您常用的sshd
配置的副本。确保配置以下语句:
Port 12345
AddressFamily inet
我还建议强制执行公钥身份验证并禁用Internet访问的密码身份验证:
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
第四种办法
侦听端口也可以硬链接到IP地址
的/etc /SSH /sshd_config:
ListenAddress 10.10.10.10:22
ListenAddress 20.20.20.20:4444