我在本地计算机上有一个文件,希望使用 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
)和无密码sudo
(NOPASSWD
或使用身份验证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\""