为了减少日志中的噪音并略微降低可发现性(以及在 fail2ban 之上,仅允许公钥身份验证等),我经常更改设置为不同端口的服务器上的 sshd 端口,假设为 5492。目前我要么将 -p 5492 附加到我的 ssh 命令,要么将每个特定服务器的端口添加到我的ssh_config
.
如果端口 22 不起作用,有没有办法配置 ssh 以尝试连接到端口 22 和端口 5492?
Ned*_*d64 11
您可以包装一个 shell 脚本,ssh
但ssh
它本身不会这样做。
使用 bash 函数的一种方法是(放入~/.bashrc
):
function ssh() { command ssh -p 22 "$@" || command ssh -p 5492 "$@"; }
Run Code Online (Sandbox Code Playgroud)
顺便说一句,建议将root
-reserved 端口用于系统服务,例如ssh
为了避免用户拥有侦听端口 5492 的进程。否则他们可能会在中间扮演人并可能捕获登录数据。因此,请使用 < 1024 的端口。
thr*_*rig 10
ssh
虽然文档在示例上有些稀疏Match
,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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2739 次 |
最近记录: |