使用 sudo 通过 ssh 传输目录

使用 sudo 通过 ssh 传输目录

我正在尝试通过 ssh 将目录从远程服务器 (CentOS) 传输到我的本地计算机 (Ubuntu)。有两个用户:A 和 B。用户 A 可以 ssh 进入远程服务器并具有 sudo 访问权限。用户 B 拥有远程服务器中的目录。

要将用户 B 拥有的目录转移为用户 A,需要使用 sudo。

目前,为了传输文件(从远程到本地),我正在使用以下内容:

ssh -tt userA@remote_host 'stty raw -echo; sudo cat /path/to/remote/file/owned/by/userB' > /path/to/local/file

为了传输目录,我尝试了 tar 方法,

ssh -tt userA@remote_host 'stty raw -echo; sudo tar -C /path/to/remote/directory/owned/by/userB/ -czf - .' | tar -C /path/lo/local/directory -xzf -

但是在本地系统上我收到此错误:

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now

我究竟做错了什么?

答案1

尝试使用 ssh 传输目录

ssh -tt userA@remote_host 'stty raw -echo; sudo tar -C /path/to/remote/directory/owned/by/userB/ -czf - .' | tar -C /path/lo/local/directory -xzf -

将上述命令的输出通过管道传输到 cat (在本地系统中)而不是 tar,可以提供更多信息:

$ ssh -tt userA@remote_host 'stty raw -echo; sudo tar -C /path/to/remote/directory/owned/by/userB/ -czf - .' | cat
userA@remote_host's password: 
gzip: compressed data not written to a terminal. Use -f to force compression.
For help, type: gzip -h
Connection to remote_host closed.

为了解决这个问题,我使用了以下命令:

ssh -t userA@remote_host 'stty raw -echo; sudo tar -C /path/to/remote/directory/owned/by/userB/ -cf - . | gzip -9nf' | tar -C  /path/lo/local/directory -xzf -

ssh 选项注意事项

由于我正在使用它sudo来访问用户 B 的目录,因此如果不使用选项则ssh返回。sudo: sorry, you must have a tty to run sudo-t

-t:强制伪终端分配

stty 选项说明

stty选项是可选的。如果需要输入密码,则-echo可以使用它(我认为) 。sudo

raw:按原样处理输入(不解释特殊字符等)

-echo:不打印输入的字符

gzip 选项注意事项

-9:将压缩设置为最大

-f:力压缩(根据错误提示

-n--no-name:不包含文件的名称和时间戳(有助于比较远程和本地文件的校验和)

相关内容