![SSH 管道文件并执行](https://linux22.com/image/583169/SSH%20%E7%AE%A1%E9%81%93%E6%96%87%E4%BB%B6%E5%B9%B6%E6%89%A7%E8%A1%8C.png)
我尝试在登录后立即在 ssh 服务器上执行二进制文件。但是,我可能希望通过一次 ssh 登录推送二进制文件的更新并执行。我目前执行此操作的流程是
cat exec | ssh user@host 'cat - > exec; chmod +x exec; ./exec'
这不起作用,因为当我点击实际执行时,它似乎只是冻结了。此后我没有收到服务器的响应。奇怪的是,一旦我上传了文件,我就可以简单地执行
ssh user@host './exec'
并且文件执行得很好。我知道它正在进入二进制文件的执行过程,并且正在chmod
正确设置文件的可执行位,但它不会在单个命令中执行。有人有什么建议吗?
答案1
使用 tar 而不是 cat,并且如果 exec 启用了 x 位,tar 也会保留模式。
tar cf - ./exec | ssh 用户@服务器'tar xf -; ./exec'
答案2
我的猜测是您的二进制文件误入了 ssh 转义序列。ssh 不能保证是二进制透明的,但您可以看看-e none
在 ssh 命令中添加“ ”是否有效。