SSH接続がスクリプトを介して機能しない

SSH接続がスクリプトを介して機能しない

次の行を1つずつ実行すると、完璧に動作します。

sudo -i wpa_supplicant -B -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf;
echo "This echo still works.";
sudo -i sshpass -p mypassphrase ssh [email protected] -T 'sudo mkdir /home/myusername/myFolder';

ただし、これをブロックとして実行するか、スクリプト内で実行すると、次のような結果が出力されます。

Successfully initialized wpa_supplicant
This echo still works.

最後の行は永遠に続きます。ディレクトリも作成されません。

どんな提案でも高く評価いたします。

編集#1

今まで答えてくれてありがとう。

@Sotto Voce:はい、wpa_supplicantはsshに必要な接続を開始します。

@sudodus:答えてくれてありがとう。この問題を再現するために、SSHコマンドラインでsudoを使用する必要はありません。元の投稿が混乱していたらすみません。とにかく単純化されたコード

sudo -i wpa_supplicant -B -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf;
echo "This echo still works.";
sshpass -p mypassphrase ssh [email protected] 'who';

同じ効果を示します。ターミナルで1行ずつ貼り付けて実行するとうまくいきます。ただし、すべての行が同時に実行される場合(スクリプト内など)、常に最後の行が実行されます。

現在私が考えている方向は:ターミナルでのみ実行するときと、あらかじめ使用することは許可されないかもしれない組み合わせで実行するときに違うべきですか?sshpass -p mypassphrase ssh [email protected] 'who';sudo -i wpa_supplicant ...myusernamesudo -i

ベストアンサー1

インタラクティブにコマンドを入力することとコマンドを実行するスクリプトの違いについて私が考えるのは次のとおりです。

このwpa_supplicantコマンドはSSHに必要なネットワークリンクを開きます。 sshコマンドが呼び出されたときにネットワークリンクが機能しない場合はどうなりますか?私の自宅のコンピュータでは、接続を開始するSYNパケットを受信する人がいないため、sshコマンドは長い間中断されます。その後、SSHがタイムアウトしてエラーを報告します。スクリプトと同じ症状です(Sshエラーを待つかどうか言及していませんが)。

wpa_supplicantコマンドとコマンドを手動で入力すると、sshそれらの間に5〜7秒があります。これは、sshコマンドが開始される前にネットワークリンクが確立されるのに十分な時間です。スクリプトがコマンドを実行すると、その間に時間がほとんどなく、sshが最初のSYNパケットを送信したときにリンクはまだ準備されていません。

sleep 10私のアドバイスは、間の境界があなたに適していることを確認することです。echosudo ... ssh ...

おすすめ記事