我正在嘗試撰寫一個 bash 腳本,該腳本使用除錯(ssh -vvv)對指定的主機/主機運行 ssh 命令。我不是想登錄到服務器,而只是想看看服務器提供的所有 kex、mac 和密碼。
在使用 -G 選項進行協商后,我確實創建了一個腳本來查找 kex 演算法。
#!/bin/bash
for f in `cat servers.txt`;
do echo "### $f ###";
echo -e "kexalgorithms"
result=$(ssh -G $f uname -a | grep kexalgorithms)
echo $result;
done
但是,我現在意識到這個輸出取決于本地機器上的 ssh 配置,并且不會給我遠程服務器提供的確切 kex。
如果我這樣做ssh -vvv <host>,它將在該行中提供此資訊
debug2:對等服務器 KEXINIT 提議
debug2:KEX 演算法:curve25519-sha256,[email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16 -sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256
debug2:主機密鑰演算法:rsa-sha2-512、rsa-sha2-256、ssh-ed25519 debug2:密碼
但是,如果ssh -vvv從腳本運行,它將卡在用戶名/密碼提示符處。
有什么方法可以將標準輸出保存到密碼提示到檔案中(可能以主機名作為檔案名)并在密碼提示下中斷腳本運行?
提前致謝
uj5u.com熱心網友回復:
從遠程 ssh-server 獲取所有支持的密鑰交換演算法nmap:
nmap --script ssh2-enum-algos -p 22 YOUR-SSH-SERVER \
| awk -v a='kex_algorithms:' '$2==a{getline; while( $0~/^\| {7}/ ){ print $2; getline }}'
輸出(例如):
曲線25519-sha256 [email protected] ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 diffie-hellman-group-exchange-sha256 diffie-hellman-group16-sha512 diffie-hellman-group18-sha512 diffie-hellman-group14-sha256
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/407343.html
標籤:
上一篇:如何等到在一個while回圈中啟動的所有后臺作業都完成了某個步驟?
下一篇:使用時如何使回聲僅“回聲”一次
