Linux 在本地网络上测试活动ssh密钥

Linux 在本地网络上测试活动ssh密钥,linux,bash,shell,Linux,Bash,Shell,我目前正在尝试实现一个bash脚本,该脚本将验证服务器上的SSH密钥是否仍然链接到局域网上活动的已知主机。您可以在下面找到我的bash脚本的开头部分来实现这一点: #!/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 >

我目前正在尝试实现一个bash脚本,该脚本将验证服务器上的SSH密钥是否仍然链接到局域网上活动的已知主机。您可以在下面找到我的bash脚本的开头部分来实现这一点:

#!/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
如果上面的bash脚本能够更好地服务于所描述的目标,那么请编辑/修改它

任何帮助都将不胜感激


谢谢

以下功能很酷:

</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
' --

这令人困惑。所有的临时文件都是不需要的。您的本地网络上有活动主机的列表吗?或者你假设你的本地网络上的所有电脑都已打开?为什么您仅限于bash用户?您好@KamilCuk,我假设$bash\u users/.ssh/known\u hosts中的所有主机都已打开。我不应该只局限于bash用户,我还应该包括“/bin/sh”用户。我明白你的意思,因为我在cat中会混淆所有的临时文件,但只要它符合我的目标,我很高兴:)我对任何想要编辑/修改bash脚本以使其更干净/更好的人都非常开放。感谢我的经验,我使用
nmap
扫描多台主机以查找多个打开的端口和协议,这在大多数发行版的repos中都可用。我们可以使用GitHub上可用的“masscan”,以便使用以下语法查找局域网上打开的所有SSH服务器:“masscan 192.168.0.0/16-p22-oL LAN.SSH.txt——最大速率30000——打开——横幅——sS-Pn-n——随机化主机——v——发送eth”。这将在LAN.SSH.txt中保存所有SSH服务器。在txt文件中列出了所有LAN SSH服务器之后,我们如何使用诸如“SSH-l$users\u have\u/bin/bash-i$SSH\u keys$SSH\u servers”之类的内容来测试它们“并将可以登录到output.txt中的阳性结果保存?