如何设置 ssh 每次不仅尝试端口 22,而且尝试辅助端口?

如何设置 ssh 每次不仅尝试端口 22,而且尝试辅助端口?

作为减少日志中的噪音并稍微降低可发现性(以及在fail2ban之上,仅允许公钥身份验证等)的努力的一部分,我经常将我设置的服务器上的sshd端口更改为不同的端口,比方说5492。目前我要么将 -p 5492 附加到我的 ssh 命令中,要么将每个特定服务器的端口添加到我的ssh_config.

如果端口 22 不起作用,是否可以配置 ssh 尝试连接到端口 22 和端口 5492?

答案1

您可以包装 shell 脚本,sshssh它本身不会这样做。

使用 bash 函数的一种方法是(放入~/.bashrc):

function ssh() { command ssh -p 22 "$@" || command ssh -p 5492 "$@"; }

顺便说一下,建议使用root- 保留端口对于系统服务,例如ssh为了避免用户拥有监听端口 5492 的进程。否则,他们可能会充当中间人并可能捕获登录数据。因此,请使用小于 1024 的端口。

答案2

sshMatch本身可以通过记录来做到这一点ssh_config(5)尽管文档中的示例有些稀疏。如果您想要将复杂性推入 SSH 配置中,那么这种形式可能是合适的,尽管受到语法限制,ssh_config(5)并且可能需要进行一些调整才能获得所需的结果。值得注意的是,自定义端口要么无法设置,要么可能在之前的尝试中设置错误Match。这就是为什么在下面测试时设置两次,或者默认设置一次,而在建立规范默认值时不设置的原因。

# here we set the defaults for the host (no port!)
Match !canonical host testhost
  CanonicalizeHostname yes
  Hostname 192.0.2.42
  IdentityFile ~/.ssh/id_blahblah
  ...
# port available?
Match canonical host 192.0.2.42 exec "is-ssh-up %h 2222"
  Port 2222
# or the default port
Match canonical host 192.0.2.42
  Port 22

is-ssh-up仅检查给定端口上是否有响应,并且可能看起来像

#!/usr/bin/env expect
package require Tcl 8.5
if {[llength $argv] < 2} {
   puts stderr "Usage: is-ssh-up host port"
   exit 1
}
puts stderr "is-ssh-up: DEBUG trying $argv"
set socket [socket -async [lindex $argv 0] [lindex $argv 1]]
chan event $socket readable [list exit 0]
after 3000 [list exit 1]
vwait godot

答案3

您可以使用 的通配符功能~.ssh/config,将此条目放入列表中:

Host *
Port 5492

但这本身不会回落到 22。

如果您将其放在最后,如果您需要 22,您仍然可以通过在其上方放置不同的值来覆盖这些主机。 (并且您始终可以在命令行上覆盖它。)

相关内容