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

以sudo用户执行rsync迁移经销商Web服务器的权限问题咨询

解决sudo切换用户后SSH密钥失效的迁移方案

我来帮你搞定这个迁移问题,核心就是解决切换到用户B后没法用你原来SSH密钥的问题,给你几个实用的方法:

方法1:sudo切换时保留SSH代理环境

最省心的方法是让用户B复用你当前账号的SSH代理连接,这样不用额外复制密钥。执行切换命令时加上-E参数保留环境变量:

# 直接切换到用户B并连接目标机器,保留你的SSH_AUTH_SOCK环境
sudo -E -u B ssh user@target-machine

如果需要复制文件,用scp的话:

sudo -E -u B scp /path/to/Bs/files user@target-machine:/destination/path

注意:这个方法需要源服务器的sudo配置没有限制SSH_AUTH_SOCK变量的保留,大部分默认配置是允许的,如果不行再试下面的方法。

方法2:把你的密钥复制到用户B的目录(临时方案)

如果方法1失效,可以临时把你的SSH私钥复制到用户B的.ssh目录下,设置正确权限后就能用了:

  1. 先切换到用户B的shell:
sudo -u B bash
  1. 如果.ssh目录不存在就创建:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
  1. 退出用户B,回到你的账号,复制私钥过去:
sudo cp ~/.ssh/id_rsa /home/B/.ssh/
sudo chown B:B /home/B/.ssh/id_rsa
sudo chmod 600 /home/B/.ssh/id_rsa
  1. 现在切换回用户B就能正常用密钥连接目标机器了,迁移完成后记得删掉这个私钥:
sudo -u B rm ~/.ssh/id_rsa

方法3:直接在迁移命令中指定sudo切换用户(推荐)

如果只是要复制文件,可以不用切换用户,直接在rsync/scp命令里让源服务器端执行sudo切换到B,这样全程用你的账号和密钥:
比如用rsync(比scp更适合大量文件):

rsync -avz --rsync-path="sudo -u B rsync" your-account@source-server:/path/to/target/files your-target-account@new-machine:/destination/path

这个命令的逻辑是:你用自己的账号连接源服务器,然后在源服务器上执行rsync时自动sudo切换到用户B来读取文件,全程用你的SSH密钥,不用处理用户B的密钥问题。

额外注意事项

  • 确认用户A的sudo权限是否允许切换到B:可以先执行sudo -l -u B查看允许的命令
  • 确保用户B对要迁移的文件有读取权限
  • 迁移完成后记得清理临时的密钥文件(如果用了方法2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:17:18