首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ssh输出重定向到文件更改行尾

将ssh输出重定向到文件更改行尾
EN

Unix & Linux用户
提问于 2021-04-14 11:06:58
回答 1查看 1K关注 0票数 5

首先,如果我做了一个简单的ssh admin@example.com "cat backup.tar" > backup.tar,这是不可能的!所以,我不知道还有什么东西能转化它。

我需要在不允许访问服务器的情况下提供系统当前状态的备份。我所做的是:

  1. 创建一个新用户。我们叫他username
  2. 只允许通过ssh-key访问。
  3. 把钥匙放进authorized-keys
  4. /etc/passwd中的命令/ shell更改为username的自定义脚本
  5. 自定义脚本通过执行数据库转储和复制一些文件来获取数据,并最终创建一个tar存档到stdout
  6. 确保stdout没有额外的输出。

要获得您需要做的数据:ssh username@example.com > backup.tar

现在,除了行结束被更改之外,几乎所有的事情都很好。tar变得更大,我可以看到每一行都有以^M符号结尾的dos行。如果在二进制tar文件上强制使用dos2unix,则该文件与服务器上的文件匹配。

为什么会发生这种情况,是什么改变了这句话的结尾?我甚至将其简化为以下内容:在username中链接的/etc/passwd服务器上的脚本只生成一个cat .viminfo,当使用上面的ssh命令以username登录并将输出重定向到本地计算机上的文件时,行尾仍然传输错误。

EN

回答 1

Unix & Linux用户

发布于 2022-05-19 18:42:25

我正在使用ssh为我的python脚本创建一个隧道。ssh命令行不执行任何操作,它没有参数,所以它尝试打开一个shell和一个伪tty。

在使用subprocess.Popen启动ssh之后,我的python脚本的换行符就会被分解成只有linefeed,没有回车,所以python脚本的输出就见鬼了。最重要的是,由于我不理解与伪tty相关的原因,python脚本将不会在pytest下运行。我可以让它在pytest下运行,并将-tt提供给ssh,但是普通的python仍然会被破坏。-T不适用于pytest

我解决了这个问题,在ssh命令行中添加了一个很长的睡眠命令,即相当于ssh -L 1234:remote:1234 user@remote sleep 1000000。然后,没有假的有趣的事情发生,和ssh隧道将自我关闭后,11天。我只需要为测试目的打开隧道,所以超时不是问题。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/645031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档