当内部客户端从给定 IP 范围内的特定端口连接到服务器上的任何给定服务时,如何自动在服务器上启动出站 SSH 连接?请注意,如果连接已经建立,则不应启动连接。
似乎没有非脚本方法可以做到这一点,就好像连接已经建立一样,没有办法检测到使用Match
andForceCommand
方法来阻止 ssh 尝试重新连接(或者不必要地打开一个全新的出站) ssh 会话)。
因此,我想到了一个像这样的脚本(这只是一个草稿,用于说明这个想法):
#######auto_ssh-script.sh
####### iptables rule logging all new incoming, unestablished, never before seen connections
iptables -I INPUT -p tcp --sport 22 -m state --state NEW -m state !
--state ESTABLISHED -m state ! --state SEEN_REPLY -j LOG --log-prefix CONNECT
#######background script --> read log and look for a match to string CONNECT
cat /proc/kmsg | while read LOGGING
do
LOG='echo "$LOGGING" | grep 'CONNECT' '
if ["$LOG" = ' ' ] & UP= 'echo alxw | grep ssh '
if [ "UP" = ' '] then
fi
ssh -p 22 <user>@<somewhere-out-there.com
echo "Connected"
done
难道就没有更好的办法吗?如果没有,我该如何改进这个脚本?
答案1
基本上你可以在你的sshd_config
:
Match User user Address 192.168.100.0/24 LocalPort 22
ForceCommand ssh some-other-ip
LocalPort 22
如果您仅在普通端口上运行服务,则不需要。客户端 IP 范围为192.168.100.1
- 192.168.100.254
,用户名为user
。