关于busybox:ssh客户端(路由器上的dropbear)放在后台时没有输出

ssh client (dropbear on a router) does no output when put in background

我正在尝试在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"') &

顺便说一下,我正在运行Linux2.4.37.10上BusyBox v1.17.4中的ssh客户机dropbear v0.52(tomatousb构建在WRT54G上)。

有没有办法得到输出?这种行为的原因是什么?

编辑:

为了方便起见,这里是普通的ssh帮助输出(在我的tomatousb上):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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构建的,或者在"dropbar v0.52"中,tomatousb中的构建和ubuntu提供的构建之间存在未知的修复(帮助输出的差异只是ubuntu上的双大小默认接收窗口缓冲区)。一个进程如何知道它是否被放在后台?这个问题有解决办法吗?


我的OpenWRT路由器也有类似的问题。如果没有stdin(例如由cron运行时),Dropbearssh客户机不会向输出写入任何内容。我假设&;对进程stdin有相同的影响(无输入)。

我在作者的BugTracker上找到了一些解决方法。尝试从/dev/zero重定向输入。像:

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

当我试图在博客页面上描述的时候,它对我很有用。