我在同一路由器后面有两台计算机。让我们将它们称为A和B。

A可以通过以下方式SSH到B:ssh usr@<internal ip of computer>

B可以通过相同的方式SSH到A,但是外部IP必须是用过的。我已将路由器的端口22转发到计算机A的IP,所以这对我来说很有意义。

但是,我也想将端口26转发到计算机B,并从网络外部转发SSH通过同时使用两者的外部IP,但指定端口22或26来有效选择要使用的计算机。

我尝试允许端口26通过A上的iptables的OUTPUT和B的INPUT,但是那似乎没有用。我也将端口26转发给了B的内部IP(通过路由器),就像对A进行22一样。

当我尝试使用外部从A到B的SSH时,这就是我得到的IP和端口26:

ssh: connect to host xx.xx.xxx.xx port 26: Connection refused.


版本:


A = OpenSSH_5.9p1 Debian-5ubuntu1,OpenSSL 1.0.1 14 2012年3月
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。它仍然给我连接拒绝的消息。 (我重新启动无济于事。)

评论

您是否在第二台计算机的端口22或26上运行SSH?

请注意,/ etc / ssh / ssh_config是ssh客户端配置。在/ etc / ssh / sshd_config中是ssh守护程序配置。

#1 楼

似乎您没有在第二台计算机的端口26上运行SSH。您可以将该计算机上的端口号更改为26。

编辑/etc/ssh/sshd_config并不要忘记重启SSH(service sshd restart)或将其保留在22上,但是将路由器上的端口26转发到端口第二台机器上为22。另外,不要忘记更改第二台计算机上的任何防火墙设置以允许连接通过。

评论


嗯...所以sshd_config必须更改,而不是ssh_config吗?

–加里
13年4月4日在23:26

正确。 sshd是服务(d用于守护程序)。编辑配置文件(使用sudo gedit),然后使用“ sudo service ssh restart”重新启动服务。

–Nerdfest
13年5月5日在5:11

解决了问题。也不必更改任何防火墙设置。

–加里
13年5月5日在13:28

#2 楼

如果您使用的是Linux系统,并且想通过端口26连接到SSH服务器,则可以使用以下命令。

ssh user@192.168.1.1 -p 26


注意:


用服务器的IP地址或DNS名称替换服务器IP。
按设置更改端口号。
如果使用自定义端口SSH,则最多允许使用相同的端口防火墙上的出站,入站连接,否则连接将无法建立


评论


不,这不是正确的答案。 OP遇到守护程序无法在所需端口上侦听的问题。他明确地寻求有关SSH服务器和/或NAT配置的帮助,但是当前答案忽略了原始文章,并描述了OP已知的客户端命令选项。我不知道这个答案如何获得如此多的赞誉。

–nnovich-OK
18年5月4日在7:29

这对大多数人是正确的,但是对于OP的问题却不正确。

–Ultrasonic54321
19年2月15日在13:54

但是手册上却说:.... [user @] host [:port]] ....我错过了什么吗?

– Daddy32
19-4-4在19:27



我不会说OP“明确地问了……”他的问题,在我看来,他似乎在连接端口26时遇到问题。似乎他想通过为每个端口指定一个不同的端口来区分两者。目前尚不清楚是客户端还是服务器。

–马蒂·弗里德
20年1月28日在23:45

谢谢您的帖子-这就是我想要的。 @ Daddy32注意:您缺少的是尝试使用该格式。它在我的系统上不起作用,但是-p选项可以。

–马蒂·弗里德
20 Jan 28'在23:48

#3 楼

我仅将端口22用于Intranet ssh访问。

通过Internet访问,我使用了自定义(不寻常)端口。
这样做的好处是,可以减少脚本孩子产生的负载谁正在扫描端口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


#4 楼

侦听端口也可以硬链接到IP地址

/ etc / ssh / sshd_config:

ListenAddress 10.10.10.10:22
ListenAddress 20.20.20.20:4444


评论


这应该是评论而不是答案。

– Pablo Pazos
18-10-23在1:10

#5 楼

正如我在相关答案中所解释的那样,ssh客户端允许将URI格式指定为ssh://user@host:1234。例如:

ssh  ssh://myuser@mydomain.com:2222


其中2222是端口号。替换您打算使用的端口号。当然,请记住,要连接到指定的端口,ssh服务器(在您要连接的主机上)必须首先监听指定的端口

评论


您使用什么ssh客户端?在Linux Mint的bash shell上不起作用。您需要使用“ ssh host -p端口”。

–马蒂·弗里德
20年1月28日在23:51

@MartyFried您好,抱歉回复延迟。我使用的是OpenSSH_7.7p1 Debian-2,OpenSSL 1.0.2o 2018年3月27日我不知道Linux Mint使用什么,但是此页面community.linuxmint.com/software/view/openssh-client表示这是一个``便携式实现”因此实际上可能有所不同。

– Sergiy Kolodyazhnyy
20-2-9的3:31

没问题。 Mint使用OpenSSH 7.6 Ubuntu,但是我看到了来自Debian的补丁,所以我不知道它们之间的差异。我跟踪了您到OpenSSH BSD手册页(man.openbsd.org/ssh)的链接,它的外观与我所拥有的差不多。太糟糕了,如果使用与ftp端口规范相同的格式,那就更好了。

–马蒂·弗里德
20-2-11在3:25



我很好奇,因此我进行了更多搜索,并找到了一个看上去很旧的旧版本的网页(linux.die.net/man/1/ssh),但它显示了您使用的格式。有趣,但是我不知道这意味着什么。 :-)

–马蒂·弗里德
20-2-11的3:31

该解决方案的优点在于,您可以将所有信息(用户名,服务器名,端口甚至密码)编码为一个字符串。

– Manu CJ
2天前

#6 楼

在默认端口(TCP / 22)上运行ssh不是一个好主意,也不要从WAN IP 22转发到使用LAN IP上的ssh-server的任何端口。

从更一般的意义上讲,进行连接ssh-server服务应该在该端口上侦听。您必须从/etc/ssh/sshd_config#Port 22Port 26(请注意d)上进行编辑。即,取消注释并更改端口。也许比26更好的是上面的随机值,例如42895。

重新启动ssh服务器服务

sudo systemctl restart sshd.service



然后从ssh -client,您将可以连接

ssh user@serverNameOrIP -p 42895


奖金:mosh


如果在服务器上安装了mosh软件包,则可以使用

mosh --ssh="ssh -p 42895" serverNameOrIP