在scp期间更改用户


16

我需要在Linux机器之间复制文件。我用来登录(myuser)的用户与可以访问该文件的用户不同。

如果仅ssh使用机器,我可以使用切换用户,我可以在sudo su someuser一段时间内以某种方式进行操作scp吗?

在使用WinSCP时,我通过配置SCP / Shell做到了这一点,因此我相信必须有类似的方法可以通过纯Shell来实现。


我很困惑。您为什么不以操纵文件的用户身份登录?
rahmu 2013年

因为无法使用其他用户登录。
Tarlog

如何与连接ssh和执行scp,是这样的:ssh myuser@host "sudo scp ..."
rahmu 2013年

也许这里的答案可以在这种情况下起作用?unix.stackexchange.com/questions/43094/…@Tarlog这假定在远程计算机本身上,您可以ssh someuser @ remote
Bernhard

Answers:


9

假设您可以ssh锁定的用户不需要密码即可将sudo su转换为目标用户,您可以尝试以下操作:

dd if=myfile | ssh some.host "sudo -u targetuser dd of=myfile" 

...介意,我仍然不相信仅配置targetuser为仅允许通过SSH进行scp / sftp / rsync并使用RSA密钥对进行身份验证不是更好的选择。


1
tar -cvf - * | ssh user@host "sudo -u targetuser tar -C /targetdir -xf -"一堆文件
Matt

也是如此,我想我们可以讨论是否-z或者-j是根据连接速度和计算机硬件两边有用...
Shadur

3

如果您知道其他用户的凭据(someuser),则只需在scp通话中指定即可。

man scp页面:

文件名可能包含用户和主机规范,以指示该文件要与该主机复制。可以使用绝对或相对路径名来明确显示本地文件名,以避免scp将包含“:”的文件名视为主机说明符。也允许在两个远程主机之间复制。

这是使用的语法:

[[user@]host:]/path/to/file

您要使用user 将文件/home/foo/bar从复制host1到本地主机someuser,这是命令:

scp someuser@host1:/home/foo/bar .

系统将要求您进行身份验证(密码,密钥等)。


1
无法以其他用户身份登录。
Tarlog

然后使用RSA密钥建立仅scp / rsync的登录名。
Shadur

1
使用任何一种登录方式都无法使用其他用户。除此之外,我已经将RSA密钥用于ssh / scp。
Tarlog

1

可能,但是我想说这是一种非常尴尬的处理方式。

我的第一个建议是以该用户身份登录。即使您没有该用户的密码,也可以将自己的公共ssh密钥添加到他们的authorized_keys中,然后使用他们的密钥进行scp,如rahmu所示。

如果不可能,我的第二个建议是通过ssh登录,将sudo登录到用户,并创建要复制的文件的tarfile,并将其放在您自己的用户可以读取的位置。然后关闭该tarfile。


无法登录其他用户。是的,我自己想出了第二个建议。寻找一种简单的方法:)
Tarlog

那么,由gcb发布的链接应该有用。至少如果您要这样做一次以上。或者,当然,您可以更改文件的访问权限,以使您自己的用户可以访问该文件。
珍妮·D

好吧,我正在尝试创建一个脚本(当然该脚本将被多次使用),以供不同用户使用。因此,授予我访问权限并不会真正有帮助。任何能够“ sudo su otheruser”的人都应该能够运行脚本。
Tarlog 2013年

知道了 我将从gcb的链接开始,然后,如果您在脚本方面遇到问题,则将其发布,看看我们是否可以众包一些帮助。
珍妮D


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.