使用 sudo scp 到远程服务器

使用 sudo scp 到远程服务器

我在服务器 A 上有一个文件(位于 NAT 后面,因此无法直接寻址)。需要将该文件复制到服务器 B 中,并将其放在仅限 root 使用的目录中。我在服务器 B 上有一个具有 sudo 权限的帐户。scp 命令的语法是什么?

答案1

首先,你需要将文件复制到你无需 sudo 即可进行写入操作的地方,

scp yourfile serverb:

然后使用 sudo 移动文件

ssh serverb sudo mv yourfile /path/to/the/destination

如果您没有可写的位置,请为您的用户创建一个具有写权限的临时目录。

ssh serverb sudo mkdir tempdir && sudo chmod 777 tempdir
scp yourfile serverb:tempdir
ssh serverb mv tempdir/yourfile /path/to/the/destination

答案2

使用 SCP,您必须分两步完成,但是,您可以使用 rsync 一步完成,如下所示:

rsync --rsync-path="sudo rsync" <LOCALFILE> USER@SERVER2:/root

注意:这确实需要NOPASSWDsudo 配置。如果您必须输入 sudo 密码,则需要两步操作。

要复制目录,您需要添加-r参数。并-v进行详细输出。


要使用上述方法和凭证,您需要将其添加到您的~/.ssh/config文件中,例如

Host SERVER2
  HostName server2.example.colm
  User USER
  #IdentityFile ~/.ssh/custom_key.pem

答案3

您可以使用 ssh 和 tar 来解决此问题:

ssh -t host 'sudo -v'
ssh -C host 'cd /; sudo tar cf - path/to/file/or/dir' | tar xpsf - --preserve

这首先会更新你的 sudo 时间戳(如果需要会要求输入密码,这需要 tty(ssh -t)),然后使用 sudo 远程创建 tarball 并在本地提取。

RedHat 5 上的“tar”要求在“xpsf -”命令之后加上“--preserve”选项。

答案4

如果每次使用 sudo 时都需要输入密码,可以将其保存到文件中:

echo "Enter password: "; read -s password; echo $password > password_file

然后将其与源文件一起发送。

cat password_file source_file | ssh remote_host 'sudo -S sponge target_file'

如果您没有 moreutils,您可以使用tee代替。sponge

相关内容