![一次性操作](https://linux22.com/image/906724/%E4%B8%80%E6%AC%A1%E6%80%A7%E6%93%8D%E4%BD%9C.png)
我需要将文件从本地复制到远程服务器。我使用 rsync 进行无密码连接。迁移后我无法更改文件的权限。
我正在使用这个命令。
rsync -ab --suffix _BKP"$(date +%Y%d%m)" --perms --chmod=ug+rwx,o+rx --chown=sai:sai /home/yesh/yesh_final_V1.sh[电子邮件保护]:/data001/是的
yesh 也是超级用户。我的 rsync 版本是 rsync-3.1.1-1.el7.rfx.x86_64。
我做错了什么吗?如果是,请纠正我。或者还有其他方法可以使用 sudo 用户更改远程服务器上的权限吗?
注意:我不想登录服务器并进行更改。我需要从本地服务器本身完成此操作,就像从脚本运行一样。
答案1
通常,直接使用 ssh 就足够了,一次性实现。
一次性操作
只要 yesh 是超级用户并且您知道 yesh 的密码,您就可以执行以下操作通过 ssh 进行更新。
ssh 作为 yesh(假设您有密码)。
更改以使脚本可执行
Ubuntu> sudo chmod 755 /home/yesh/yesh_final_V1.sh
脚本化操作
问题作者评论说他们希望以脚本形式执行此操作。为此,您可以使用主机上必须存在的“sshpass”功能。
sudo apt-get install sshpass
要使用它,您可能会发现下面的 bash 脚本示例很有用:
function scripted_remote_operation { sshpass -f password.txt ssh -o StrictHostKeyChecking=no -t -t [email protected] -o StrictHostKeyChecking=no <<EOF sudo chmod 755 /home/yesh/yesh_final_V1.sh exit EOF }
这可以作为脚本的一部分从主机执行,自动登录,根据要求进行更改。不幸的是,这将要求禁用具有管理员权限的用户的密码要求(不推荐)。
例如,在目录中
/etc/sudoers.d
您可以包含文件
010_ubuntu-nopasswd
内容
root ALL=(ALL) NOPASSWD: ALL
提供此信息仅供参考。在机器上禁用 sudo 密码绝对不是一个好主意。
可能的答案:远程机器上没有 sudo
如果文件是远程安装的,并且所有者为 yesh,则 chmod 操作可以在不提升权限的情况下进行,并且 chown 操作可以包含在同一个 sshpass 脚本中。