SSH 키를 사용하여 LAN에서 아직 활성화된 SSH 서버를 찾기 위해 bash 스크립트를 완료하려고 하는데 다음 단계에서 멈췄습니다.
#!/bin/bash
# LAN SSH KEYS DISCOVERY SCRIPT
</etc/passwd \
grep /bin/bash |
cut -d: -f6 |
sudo xargs -i -- sh -c '
[ -e "$1" ] && cat "$1"
' -- {}/.ssh/known_hosts |
cut -d' ' -f1 |
tr ',' '\n' |
sed '
/^\[/{
s/\[\(.*\)\]:\(.*\)/\1 \2/;
t;
};
s/$/ 22/;
' |
sort -u |
xargs -l1 -- sh -c '
if echo "~" | nc -q1 -w3 "$1" "$2" | grep -q "^SSH"; then
echo "#### SUCCESS $1 $2";
else
echo "#### ERROR $1 $2";
fi
' --
# TIME TO TEST WHICH SSH servers are still active with the SSH keys
# AND THIS IS WHERE I AM FROZEN...
# Would love to have bash script that could
# ssh -l $users_that_have_/bin/bash -i $ssh_keys $ssh_servers
# Would also be very nice if it could save active
# SSH servers with the valid keys in output.txt in the format
# username:local-IP:/path/to/SSH_key
읽기 더 쉬운 또 다른 것이 있습니다(단, 일부 임시 파일을 생성합니다):
#!/bin/bash
# LAN SSH KEYS DISCOVERY SCRIPT
# TRYING TO FIND THOSE SSH KEYS NOW
cat /etc/passwd | grep /bin/bash > bash_users
cat bash_users | cut -d ":" -f 6 > cutted.bash_users_home_dir
for bash_users in $(cat cutted.bash_users_home_dir)
do
ls -al $bash_users/.ssh/*id_* >> ssh-keys.txt
done
# DISCOVERING THE KNOWN_HOSTS NOW
for known_hosts in $(cat cutted.bash_users_home_dir)
do
cat $bash_users/.ssh/known_hosts | awk '{print $1}' | sort -u >>
hosts_known.txt
sleep 2
done
hosts_known=$(wc -l hosts_known.txt)
echo "We have $hosts_known known hosts that could be still active via SSH
keys"
# TIME TO TEST WHICH SSH servers are still active with the SSH keys
# AND THIS IS WHERE I AM FROZEN...
# Would love to have bash script that could
# ssh -l $users_that_have_/bin/bash -i $ssh_keys $ssh_servers
# Would also be very nice if it could save active
# SSH servers with the valid keys in output.txt in the format
# username:local-IP:/path/to/SSH_key
ssh -l $users_that_have_/bin/bash -i $ssh_keys $ssh_servers
이제 위의 bash 스크립트에 명시된 대로 작업을 수행 하고 활성 로그인을 덤프하는 방법을 찾으려고 합니다 .출력.txt파일 형식은 다음과 같습니다.
username:local-IP:/path/to/SSH_key
답변돕 고티논평:
이제 이것을 내 bash 스크립트에 통합하는 방법을 알아내려고 노력 중입니다. 이것은 나의 현재 시도입니다:
users=$(cat cutted.bash_users)
ssh_keys=$(cat ssh-keys.txt)
if ssh -l $users -i $ssh_keys $hosts_known -o BatchMode=yes -o
ConnectTimeout=5
then echo $users:$hosts_known:$ssh_keys SUCCESS >> results.txt
else
echo FAILED
fi
답변1
안타깝게도 댓글을 추가할 수 없는 것 같아서(평판 포인트 50 필요) 여러분께 답글을 추가하게 되었습니다. 또한 이전에 질문을 수정했지만 다음과 같은 알림을 받았습니다.
제안된 수정사항이 검토 대기 중입니다. Patrick Mevzek이 2시간 전에 이에 대해 댓글을 달았습니다. 이 편집 내용을 거부하는 것은 게시물 작성자에 대한 의도이며 편집자로서 말이 되지 않습니다. 댓글이나 답변으로 작성해야 합니다.
U&L에 오신 것을 환영합니다. SSH에 반환 코드가 있다는 것을 알고 계셨습니까? -o BatchMode=yes와 함께 사용하면 테스트를 자동화하는 데 도움이 됩니다. (예: ssh ... ; then echo good for ... >> good.txt ; 그렇지 않으면 echo bad for ... >> bad.txt ; fi ) – Archemar 54분 전 및 can의 경우 cat|grep|cut| $(awk -F: '$7 ~ //bin/bash/ { print $6 }' /etc/passwd) do.... – DopeGhoti 1분 전
따라서 명확히 하자면, 각 사용자에 대해, Known_hosts에 있는 각 호스트에 대해 ~username/.ssh에 있는 가정된 개인 키를 사용하여 각 호스트에 로그인을 시도하는 것입니다. – DopeGhoti 25분 전: 예
여기;
이제 저는 이 아이디어를 다음과 같이 bash 스크립트에 통합하는 방법을 알아내려고 노력하고 있습니다.
users=$(cat cutted.bash_users)
cat ssh-keys.txt | awk '{print $9}' > cutted.ssh_keys.txt
ssh_keys=$(cat cutted.ssh_keys.txt)
if ssh -l $users -i $ssh_keys $hosts_known -o BatchMode=yes -o ConnectTimeout=5
then echo $users:$hosts_known:$ssh_keys SUCCESS >> results.txt
else
echo $users:$hosts_known:$ssh_keys FAILED >> not-active.txt
fi
여러분이 이것을 달성하는 방법을 알고 있다면, 나는 그것을 수행하는 방법을 배우게 되어 매우 기쁠 것입니다.
감사해요