机器 A 使用连接到远程机器 Bsshpass
并且远程机器 B 不能直接ssh
访问,root
所以我通过它连接到它user
并使用sudo
,并且我还禁用了user
他何时使用的密码sudo su
。当命令很简单时,例如ls -lrt /some/dir
我得到了正确的命令输出,但是当我在远程机器上启动服务器/shell 脚本时(服务器不需要时间,而脚本需要 1 分钟运行),会显示输出但 bash 不返回恢复正常(即看起来它正在做一些工作,但我知道服务器已经启动/脚本已经完成)。
使用的命令:
sshpass -p 'password' ssh -o StrictHostKeyChecking=no user@192.168.0.3 "sudo ls /dev/ttyUSB*"
以上工作正常,我得到输出并返回 bash,这样我就可以编写更多命令并做一些事情。
sshpass -p 'password' ssh -o StrictHostKeyChecking=no user@192.168.0.3 "sudo /root/path/server &"
sshpass -p 'password' ssh -o StrictHostKeyChecking=no user@192.168.0.3 "sudo /root/path/to/script/scriptTakes1Minute param1 param2"
但是,上述操作并没有按预期工作。看起来它正在工作,但不是没有返回 bash,所以我无法进一步编写命令。
我不能共享脚本或服务器程序,因为它是公司的代码。但是服务器代码使用 UNIX 数据报套接字进行通信。
/* Creating a UNIX datagram socket for Server Application */
if ((sock = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0)
{
perror("server: socket");
exit(1);
}
编辑1:
当我尝试
sshpass -p 'password' ssh -o StrictHostKeyChecking=no user@192.168.0.3 "sudo /root/path/server >/dev/null &2>1 </dev/null &"
服务器程序正确启动,但脚本没有按预期工作并且没有返回 bash,但是当我按下ENTER
bash 返回时,我知道这意味着什么,但不知道是什么。
编辑2:
我无法将输出重定向到文件,因为我不知道命令总共需要多少时间才能运行,它可能需要一分钟或几分钟。
编辑 3:
我发现了一些很有帮助的东西(我猜)。保留在该机器 B 上的脚本在后台创建了几个进程,因此sshpass
直到所有这些后台进程从机器 B 手动终止后才会返回。一旦这些程序被终止,我们就会得到该输出以及 bash 返回.
编辑4:
该脚本创建 8 个在后台运行的 ppp 会话。