0

リモートクライアントがパスなしでsshでログインできるかどうかを確認する次のコマンドがあります

 ssh -o PasswordAuthentication=no \
     $REMOTE_HOST_USER@$REMOTE_HOST_IP 1>/dev/null 2>/dev/null

コマンドが実行さpermission=noれ、残りのコードで権限を設定している場合。ちなみに「許可拒否メッセージは/dev/nullに送信されます」。しかし、2回目にコマンドを実行すると、今度はpermission=yesマシンにログインする必要がありますが、エラーや出力がないと思うため、ハングします。コードで許可を得たときのように試したからです。

ssh -o PasswordAuthentication=no $REMOTE_HOST_USER@$REMOTE_HOST_IP

今回は動作します。

それで、最初にエラーメッセージを送信し、残りのメッセージを送信しないようにするにはどうすればよいですか

編集:簡単に説明できるように、私の質問は、スクリプトを初めて実行したときにエラーを発生させる可能性のあるコマンドがスクリプトにあると言うので、エラーと出力を見たくないので、次のように実行します

command 1>/dev/null 2>/dev/null(it is in my script)

スクリプトを2回目に実行すると、コマンドはエラーを出さず、いくつかの操作を行ったためエラーは発生しませんが、2回目に実行すると/ dev/nullが原因でハングします(そう思います)。/dev/null なしで実行すると正常に動作するため

4

3 に答える 3

1

反対側で実行するコマンドを追加します。

私は通常、:またはを使用しますecho ok。最初のものは出力を生成しないはずであり、エラー メッセージが好きです。

remote_account=$REMOTE_HOST_USER@$REMOTE_HOST_IP 

ssh -o PasswordAuthentication=no $remote_account : 2> /dev/null

また

ssh -o PasswordAuthentication=no $remote_account echo ok | grep ok

あなたの質問の残りの部分はあまり明確ではありません。

于 2012-08-14T09:38:21.490 に答える
1

あなたが何をしようとしているのかは明らかではありません。

コマンドを指定しない場合、sshはシェルを作成しますが、出力はすべて direct/dev/nullであるため、何も表示されません。ハングしているように見えますが、そうではありません。コマンドを入力するのを待っているだけです。exit+ ENTERを入力すると、シェルから終了します。

ssh -o PasswordAuthentication=no $REMOTE_HOST_USER@$REMOTE_HOST_IP 'command here'
于 2012-08-14T10:53:43.620 に答える
1

エラー メッセージがないため、スクリプトはハングしません。ssh がユーザーからの入力を待っているため、ハングします。Henkが示したように、sshに実行するコマンドを与えると、sshはそのコマンドを実行してから終了します。コマンドを指定しないと、対話型シェルが開始されます。シェルはプロンプト (例: "$ ") を表示し、入力を待ちます。すべての出力を に送信しているため、プロンプトは表示されません/dev/null

ログインに成功すると、非常に短いコマンドが実行され、制御がユーザーに返されるため、Henk のコードはスクリプトを機能させます。

于 2012-08-14T10:58:22.050 に答える