我需要在 Linux 机器之间复制文件。我用来登录的用户( )的问题myuser
与可以访问该文件的用户不同。
如果我只是ssh
在机器上,我可以使用 切换用户sudo su someuser
,我可以在 的同时以某种方式执行此操作吗scp
?
在使用 WinSCP 时,我通过配置 SCP/Shell 成功完成了此操作,因此我相信一定有类似的方法可以通过纯 shell 来完成此操作。
答案1
假设您可以 ssh 访问的用户不需要密码来 sudo su 进入目标用户,您可以尝试以下操作:
dd if=myfile | ssh some.host "sudo -u targetuser dd of=myfile"
...请注意,我仍然不相信简单地配置targetuser
为仅允许通过 SSH 进行 scp/sftp/rsync 并使用 RSA 密钥对进行身份验证并不是一个更好的选择。
答案2
如果您知道其他用户 ( ) 的凭据,someuser
您只需在通话中指定即可scp
。
从man scp
页面:
文件名可能包含用户和主机规范,以指示文件将复制到该主机或从该主机复制。可以使用绝对或相对路径名明确本地文件名,以避免 scp 将包含“:”的文件名视为主机说明符。还允许两个远程主机之间进行复制。
这是使用的语法:
[[user@]host:]/path/to/file
例子
您想使用 user 将文件复制/home/foo/bar
到host1
本地主机someuser
,命令如下:
scp someuser@host1:/home/foo/bar .
系统将要求您进行身份验证(密码、密钥……)。
答案3
大概是可能的,但我想说这是一种非常尴尬的方式。
我的第一个建议是以该用户身份登录。即使您没有该用户的密码,您也可以将自己的公共 ssh 密钥添加到他们的authorized_keys 中,然后使用他们的密钥进行 scp,如 rahmu 所示。
如果这是不可能的,我的第二个建议是通过 ssh、sudo 登录用户并创建要复制的文件的 tarfile 并将其放在您自己的用户可以读取的位置。然后 scp 下来该 tarfile。
答案4
-S
在scp
命令上使用
例如https://superuser.com/questions/87597/how-to-perform-scp-as-a-sudo-user
它将允许您执行一个脚本,就像我相信您在winscp用例中所做的那样。