4

Linuxマシンでbashスクリプトを使用してリモートLinuxマシンでいくつかのことを自動化しようとしており、機能するコマンドがあります(中括弧はcmd連結からの遺物です):

(ssh -i /path/to/private_key user@remoteHost 'sh -c "echo 1; echo 2; echo 3; uname -a"')

しかし、バックグラウンドで実行するためにアンパサンドが連結されている場合、実行されているように見えますが、stdout にも stderr にも出力が出力されず、ファイルへのリダイレクト (中括弧内) でさえ機能しません...:

(ssh -i /path/to/private_key user@remoteHost 'sh -c "echo 1; echo 2; echo 3; uname -a"') &

ところで、私はsshLinux 2.4.37.10 (WRT54G 上の TomatoUSB ビルド) 上の BusyBox v1.17.4 でクライアント dropbear v0.52 を実行しています。

出力を取得する方法はありますか?この動作の理由は何ですか?

編集:

便宜上、プレーンなsshヘルプ出力を次に示します (TomatoUSB で):

Dropbear client v0.52
Usage: ssh [options] [user@]host[/port][,[user@]host/port],...] [command]
Options are:
-p <remoteport>
-l <username>
-t    Allocate a pty
-T    Don't allocate a pty
-N    Don't run a remote command
-f    Run in background after auth
-y    Always accept remote host key if unknown
-s    Request a subsystem (use for sftp)
-i <identityfile>   (multiple allowed)
-L <listenport:remotehost:remoteport> Local port forwarding
-g    Allow remote hosts to connect to forwarded ports
-R <listenport:remotehost:remoteport> Remote port forwarding
-W <receive_window_buffer> (default 12288, larger may be faster, max 1MB)
-K <keepalive>  (0 is never, default 0)
-I <idle_timeout>  (0 is never, default 0)
-B <endhost:endport> Netcat-alike forwarding
-J <proxy_program> Use program pipe rather than TCP connection

1 日後の修正:

ブレースは、同じ結果の有無にかかわらず、害はありません。ssh認証をバックグラウンドにしたかったので、この-fオプションは解決策ではありません。興味深い補足: 予期しないオプション ( など-v) が指定された場合、エラー メッセージWARNING: Ignoring unknown argument '-v'が表示されます。

x86 Ubuntu 通常のsshクライアントで試してみました。動作します。x86 Ubuntuでも試しdbclientました。動作します。したがって、この問題は TomatoUSB ビルドに固有のもののようです。または、「dropbear v0.52」の内部では、TomatoUSB のビルドと Ubuntu が提供するものとの間で不明な修正が行われていました (ヘルプ出力の違いは、デフォルトの受信ウィンドウ バッファーのサイズが 2 倍になっているだけです)。 Ubuntuの場合)...プロセスがバックグラウンドに置かれたかどうかをどのように知ることができますか? 問題の解決策はありますか?

4

1 に答える 1

6

OpenWRT ルーターでも同様の問題が発生しました。Dropbear SSH クライアントは、たとえば cron によって実行された場合など、stdin がない場合、出力に何も書き込みません。& は、プロセス stdin (入力なし) に対して同じ効果があると思います。

著者のバグトラッカーでいくつかの回避策を見つけました。/dev/zero からの入力をリダイレクトしてみてください。お気に入り:

ssh -i yourkey user@remotehost "echo 123" </dev/zero &

私のブログページで説明しようとしたので、うまくいきました。

于 2013-08-20T10:59:56.277 に答える