如何使用 SSH 将文件复制到不同用户下的远程服务器

如何使用 SSH 将文件复制到不同用户下的远程服务器

我在本地计算机上有一个文件,希望使用 SSH 程序(不是 scp、不是 rsync、不是 sftp)将其复制到远程服务器,本地文件是 SSL 私钥,我不想在传输过程中在远程服务器上创建任何临时副本。

出于安全原因,远程服务器上的 root 用户无法通过 SSH 登录,但是我的远程用户(与本地用户具有相同的用户名)可以sudo在输入密码后通过命令进行 root 更改。

问题:如何复制本地文件、通过 SSH 登录、使用sudo密码提示切换到 root 用户,然后将文件写入 root 用户拥有的目录中的远程服务器?最好用一行命令完成所有操作!

答案1

cat是你的朋友:

cat key | ssh user@host sudo "cat > final_location"

但这需要无密码身份验证(可能会克服使用ControlMaster)和无密码sudoNOPASSWD或使用身份验证pam_ssh_agent_auth- 如果您熟悉,我建议尝试一下这个ssh-agent)。

您可能还想暂时允许 root 登录(使用公钥——有一个选项PermitRootLogin without-password,它可以完全满足您的要求),然后您可以简单地使用该scp方法。

否则,我认为除了复制粘贴方法之外,没有其他合理的方法。

答案2

这将执行您想要的操作。请注意传递给 ssh 的 -t 选项。这将分配一个 TTY,以便 sudo 密码提示正常工作。

TEXT=`cat ~/.ssh/id_dsa.pub` ssh user@host -t sudo "bash -c \"echo '$TEXT' > foo.pub\""

只要输入数据中没有单引号,这种方法就有效。如果有,您可以在传输过程中使用 base64 对数据进行编码/解码。

TEXT=`base64 ~/.ssh/id_dsa.pub` ssh user@host -t sudo "bash -c \"echo '$TEXT' | base64 -d > foo.pub\""

相关内容