如何在22以外的端口上SSH


150

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

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

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

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

我试图通过iptablesA的OUTPUT 和B的INPUT 允许端口26 ,但这似乎不起作用。我也将端口26转发给B的内部IP(通过路由器),就像对A进行22一样。

这是我尝试使用外部IP和端口26从A到B进行SSH时得到的结果:

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并更改2226。它仍然给我连接拒绝的消息。(我重新启动无济于事。)


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

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

Answers:


45

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

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


啊...所以sshd_config必须更改,而不是ssh_config吗?
加里

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

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

370

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

ssh user@192.168.1.1 -p 26

注意:

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

17
此标记应标记为正确。
ken_oy

1
我同意这是正确的答案。这很简单,很关键。
m4l490n

1
@加里(Gary)将此标记为正确
悲伤诗歌

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

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

9

我仅将端口22用于Intranet 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

我还建议强制执行公钥身份验证并禁用互联网访问的密码身份验证:

PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no

7

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

/ etc / ssh / sshd_config:

ListenAddress 10.10.10.10:22
ListenAddress 20.20.20.20:4444

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

1

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

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

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


0

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

从更一般的意义上讲,连接到ssh-server服务应该在该端口上进行侦听。你必须

  1. 编辑上/etc/ssh/sshd_config注意d从)#Port 22Port 26。即,取消注释并更改端口。也许比26更好的是随机数,例如42895。
  2. 重新启动SSH服务器服务

    sudo systemctl restart sshd.service
    

然后从ssh-client您将能够连接

ssh user@serverNameOrIP -p 42895

奖金: mosh

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

mosh --ssh="ssh -p 42895" serverNameOrIP
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.