내부 클라이언트가 지정된 IP 범위 내의 특정 포트에서 서버의 지정된 서비스에 연결할 때 서버에서 아웃바운드 SSH 연결을 자동으로 시작하려면 어떻게 해야 합니까? 연결이 이미 설정된 경우에는 연결을 시작해서는 안 됩니다.
Match
연결이 이미 설정된 것처럼 이를 수행할 수 있는 비스크립트 방법은 없는 것으로 보이며 ssh가 다시 연결을 시도하는 것을 방지하기 위해 및 메소드 를 사용하여 이를 감지할 수 있는 방법이 없습니다 ForceCommand
(또는 불필요하게 완전히 새로운 아웃바운드 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
.