首先,如果我做了一个简单的ssh admin@example.com "cat backup.tar" > backup.tar,这是不可能的!所以,我不知道还有什么东西能转化它。
我需要在不允许访问服务器的情况下提供系统当前状态的备份。我所做的是:
username吧authorized-keys/etc/passwd中的命令/ shell更改为username的自定义脚本stdoutstdout没有额外的输出。要获得您需要做的数据:ssh username@example.com > backup.tar。
现在,除了行结束被更改之外,几乎所有的事情都很好。tar变得更大,我可以看到每一行都有以^M符号结尾的dos行。如果在二进制tar文件上强制使用dos2unix,则该文件与服务器上的文件匹配。
为什么会发生这种情况,是什么改变了这句话的结尾?我甚至将其简化为以下内容:在username中链接的/etc/passwd服务器上的脚本只生成一个cat .viminfo,当使用上面的ssh命令以username登录并将输出重定向到本地计算机上的文件时,行尾仍然传输错误。
发布于 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天。我只需要为测试目的打开隧道,所以超时不是问题。
https://unix.stackexchange.com/questions/645031
复制相似问题