我需要在Linux机器之间复制文件。我用来登录(myuser
)的用户与可以访问该文件的用户不同。
如果仅ssh
使用机器,我可以使用切换用户,我可以在sudo su someuser
一段时间内以某种方式进行操作scp
吗?
在使用WinSCP时,我通过配置SCP / Shell做到了这一点,因此我相信必须有类似的方法可以通过纯Shell来实现。
ssh
和执行scp
,是这样的:ssh myuser@host "sudo scp ..."
?
我需要在Linux机器之间复制文件。我用来登录(myuser
)的用户与可以访问该文件的用户不同。
如果仅ssh
使用机器,我可以使用切换用户,我可以在sudo su someuser
一段时间内以某种方式进行操作scp
吗?
在使用WinSCP时,我通过配置SCP / Shell做到了这一点,因此我相信必须有类似的方法可以通过纯Shell来实现。
ssh
和执行scp
,是这样的:ssh myuser@host "sudo scp ..."
?
Answers:
假设您可以ssh锁定的用户不需要密码即可将sudo su转换为目标用户,您可以尝试以下操作:
dd if=myfile | ssh some.host "sudo -u targetuser dd of=myfile"
...介意,我仍然不相信仅配置targetuser
为仅允许通过SSH进行scp / sftp / rsync并使用RSA密钥对进行身份验证不是更好的选择。
tar -cvf - * | ssh user@host "sudo -u targetuser tar -C /targetdir -xf -"
一堆文件
-z
或者-j
是根据连接速度和计算机硬件两边有用...
如果您知道其他用户的凭据(someuser
),则只需在scp
通话中指定即可。
从man scp
页面:
文件名可能包含用户和主机规范,以指示该文件要与该主机复制。可以使用绝对或相对路径名来明确显示本地文件名,以避免scp将包含“:”的文件名视为主机说明符。也允许在两个远程主机之间复制。
这是使用的语法:
[[user@]host:]/path/to/file
例
您要使用user 将文件/home/foo/bar
从复制host1
到本地主机someuser
,这是命令:
scp someuser@host1:/home/foo/bar .
系统将要求您进行身份验证(密码,密钥等)。
有可能,但是我想说这是一种非常尴尬的处理方式。
我的第一个建议是以该用户身份登录。即使您没有该用户的密码,也可以将自己的公共ssh密钥添加到他们的authorized_keys中,然后使用他们的密钥进行scp,如rahmu所示。
如果不可能,我的第二个建议是通过ssh登录,将sudo登录到用户,并创建要复制的文件的tarfile,并将其放在您自己的用户可以读取的位置。然后关闭该tarfile。
我尝试在下面的文章中提供一些示例。基本思想不是使用scp,而是将dd和ssh与sudo用户开关一起使用。看:
http://hmmss.wordpress.com/2014/07/02/ssh-and-scp-with-another-user