2016-10-06 11 views
2

ssh経由で接続するためにいくつかのポートを循環させようとしています。シェル/ bashの新機能では、これをどうやって実現するのか分かりません。grepを使ってコマンドの出力を見つけるにはどうすればいいですか

startingPort=xxxx 
endingPort=yyyy 

ssh(){ 
ssh [email protected] -p $startingPort 
} 

無効なポートの出力は、SSHである:localhostのポート8801をホストに接続:接続が を拒否した私はこれを捕捉し、その後、範囲

で次のポートを試してみる必要がある私は、反復処理しようとしていますポート番号が表示されるまで パスワード認証 パスワード:

答えて

0

#!/bin/bash 
startingPort=10 
endingPort=40 

for ((port=$startingPort; port<=$endingPort; port++)) 
do 
ssh [email protected] -p $port 
done 
+3

出力の解析ではなくループ部分を処理します。 –

+0

これは、正しいポートが見つかるまで反復処理を実行するまで機能します。私は失敗したそれぞれの試みをログアウトする必要があるので、この行をキャプチャする必要があります。 "ssh:host localhost port 8801に接続:接続が拒否されました。 – Norstorin

1

sshコマンドの出力を取得するには、「$?」で確認できます。例として 、あなたはエラーをログに記録する場合:

//inside the loop (of muzido answer) 
ssh [email protected] -p $port 
if [ "$?" -ne 0 ] ; then 
    //write into logfile 
fi 
1

がmuzidoとテオPNVありがとう。この2つの答えが結びついて、このタスクを達成するのに役立ちました。

log_file=/directory/log_file.txt 
startingPort=8801 
endingPort=8899 
port='' 

sshToStuff(){ 
for ((port=$startingPort; port<=$endingPort; port++)) 
do 
if [ "$?" -ne 0 ] ; then 
    echo "`date -u`" " ssh: connect to host localhost port $port: Connection refused" >> $log_file2; 
fi 


ssh [email protected] -p $port 
done 
} 
sshToKaraf 
関連する問題