Код: Выделить всё
netstat -pnat|grep sshdtcp 0 0 127.0.0.1:2223 0.0.0.0:* LISTEN 8041/sshd: server1
tcp 0 0 127.0.0.1:2224 0.0.0.0:* LISTEN 7789/sshd: server2
tcp 0 0 127.0.0.1:2225 0.0.0.0:* LISTEN 7860/sshd: server3
выбирал нужный мне и подключался
Код: Выделить всё
ssh -p 2225 user@localhost -o NoHostAuthenticationForLocalhost=yesТеперь решил написать скрипт. Все, на что я способен:
#!/bin/bash
clear
n=1;
echo "Select a client to connect to:"
netstat -pnat|grep LISTEN|grep sshd|grep "127.0.0.1:222"|awk '{print $8}'| while read client; do
echo "$n) $client"
let n=$n+1
done
echo "*) exit"
read opt;
case $opt in
1) port="2223";;
2) port="2224";;
3) port="2225";;
*) exit 3;;
esac
ssh -p $port user@localhost -o NoHostAuthenticationForLocalhost=yes
exit 0
При запуске скрипта вижу на экране:
Может посоветуете, как улучшить? Не нравится то, что порты вручную вписаны в скрипт. Пытался делать массив, который заполнялся портами (ARRAY[1]=2223, ARRAY[2]=2224 и т.д.) с помощью того же netstat + awk, но после выхода из цикла массив оказывался пустой, хотя пробовал выводить его значения еще в цикле - все ок.Select a client to connect to:
1) server1
2) server2
3) server3
*) quit
>
Если количество серверов не статическое, как показано тут, а динамическое (сегодня 3, завтра 28), то наверное не имеет смысла делать через case, а просто:
read opt;
ssh -p $ARRAY[$opt] user@localhost -o NoHostAuthenticationForLocalhost=yes