![使用与 ssh 登录不同的用户将 scp 文件发送到服务器](https://linux22.com/image/131454/%E4%BD%BF%E7%94%A8%E4%B8%8E%20ssh%20%E7%99%BB%E5%BD%95%E4%B8%8D%E5%90%8C%E7%9A%84%E7%94%A8%E6%88%B7%E5%B0%86%20scp%20%E6%96%87%E4%BB%B6%E5%8F%91%E9%80%81%E5%88%B0%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我需要将文件somefile.jar
从本地计算机(cygwin)复制到远程server.local
。我有一个 ssh 登录corp
到server.local
sudoer 上server.local
。我需要将文件放置到/opt/alice/libs/
另一个用户拥有的文件夹中:
[[email protected] ~]$ ls -ld /opt/alice/libs
drwxr-xr-x 2 alice alice 12288 Apr 13 11:09 /opt/alice/libs
由于权限不足,我无法将文件直接上传到所选目录。所以,我的复制方法只有几个/tmp/
步骤server.local
$ scp ./somefile.jar [email protected]/tmp/
$ ssh [email protected]
Last login: Thu Apr 12 18:05:41 2018 from 192.168.87.34
[[email protected] ~]$ sudo chown alice:alice /tmp/somefile.jar
[[email protected] ~]$ sudo -u alice mv /tmp/somefile.jar /opt/alice/libs/
有没有更短的方法来执行上传?
如果不存在可以实现我的目的的工具,也许可以制作一个*.sh
包含所有这些操作的脚本?
答案1
如果您想做一个简单的脚本,假设您的 sudo 不需要密码,您可以通过管道传输数据:
tar cf - ./somefile.jar |
ssh -t [email protected] sudo -u alice tar xf - -C /opt/alice/libs/
-C
解压文件之前更改目录。如果你的 tar 没有这个,请先添加一个显式的cd /opt/alice/libs/
。
答案2
这很可能是做到这一点的唯一方法。