You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带密码用SCP从macOSX 10.11.6传文件到Ubuntu18.04遇权限问题求解决

看起来你遇到的核心问题是目标目录的写入权限不足——你登录的普通用户没有直接写入的权限,必须用sudo才能操作。下面给你几个可行的解决办法,按从简单到推荐的顺序来:

方法1:先拷贝到用户有权限的目录,再sudo移动

这是最直观的方式,先把文件传到你远程用户能写的目录(比如~/temp),再通过sudo移动到目标路径:

  1. 先执行scp拷贝到临时目录:
scp -r /path/to/local/file username@ipaddress:~/temp/
  1. 然后登录远程服务器,用sudo移动文件:
ssh username@ipaddress
sudo mv ~/temp/file /path/to/folder/where/to/copy/

如果想一步到位,可以把两个命令合并:

scp -r /path/to/local/file username@ipaddress:~/temp/ && ssh -t username@ipaddress "sudo mv ~/temp/file /path/to/folder/where/to/copy/"

这里的-t选项是让ssh分配一个终端,这样sudo才能弹出密码输入提示。

方法2:直接通过ssh+sudo远程写入(适合大文件/目录)

如果是目录或者大文件,先打包再传输会更高效,同时结合sudo在远程端解压到目标目录:

tar -czf - /path/to/local/file | ssh -t username@ipaddress "sudo tar -xzf - -C /path/to/folder/where/to/copy/"

解释一下:

  • 本地用tar -czf -把文件打包成压缩包,输出到标准输出(-代表标准输出)
  • 通过管道把压缩包传给远程的ssh命令
  • 远程用sudo tar -xzf - -C解压到目标目录,-C指定解压的路径

如果是单个文件,也可以用tee命令:

cat /path/to/local/file | ssh -t username@ipaddress "sudo tee /path/to/folder/where/to/copy/file > /dev/null"

> /dev/null是避免tee把文件内容重复输出到终端。

方法3:长期解决方案——修改目标目录权限

如果你需要经常往这个目录传文件,最好直接给你的普通用户赋予该目录的写入权限:
登录远程服务器后执行:

sudo chown -R username:username /path/to/folder/where/to/copy/

这样之后你直接用普通的scp命令就能写入,不用每次都sudo了。

关于sshpass的注意事项

你之前用sshpass失败,是因为sshpass只是帮你自动输入ssh/scp的登录密码,但远程写入目标目录需要的是sudo权限,sshpass没法自动输入sudo的密码(除非你配置了sudo免密)。而且明文写密码在命令行里非常不安全,建议尽量不用这种方式。

内容的提问来源于stack exchange,提问作者Tanuki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:51:05