以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目录下,设置正确权限后就能用了:
- 先切换到用户B的shell:
sudo -u B bash
- 如果
.ssh目录不存在就创建:
mkdir -p ~/.ssh chmod 700 ~/.ssh
- 退出用户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
- 现在切换回用户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
相关产品推荐
相关产品推荐

