我正在通过 SFTP 自动传输文件,并且在更改远程主机中的文件所有权时卡住了。问题是 SFTPchown
和chgrp
命令只接受数字 uids/gids,这是事先不知道的。我的自动化的预期场景是让用户通知文件目的地和字符串用户名和组名。
有没有办法通过 SFTP 会话从远程主机中的字符串用户/组名中查询数字 uid/gid?
一个简单的解决方法是打开一个额外的 SSH 会话并使用常规的 shellchown
和chgrp
命令。但是我工作的公司使用定时令牌进行身份验证,简而言之,额外的会话意味着每台主机额外的 30 秒,这对于批量安装来说是非启动器。
更难的是ls -l
目录,也许是文件,找到具有所需凭据的目录,然后ls -n
获取数字版本。但这有可能花费太长时间,找不到合适的目录/文件,甚至如果目录有太多文件无法工作,甚至会卡住ls
......
这是不可能的。
至少在广泛使用的 SFTP 版本 3 中没有。
使用
-o ControlMaster=
并且-o ControlPath=
您可以通过单个网络连接共享多个会话(请参阅 参考资料man 5 ssh_config
)。ssh
are-M
和-S
分别的短选项(请参阅 参考资料man 1 ssh
)。这种方法要求您进行一次身份验证。sftp
来自 OpenSSH-o
的支持并可以与ssh
.步骤:
ssh -Nf -o ControlMaster=yes -o ControlPath=… user@server
. 主连接。在这里,您在连接进入后台之前进行身份验证。ssh -o ControlPath=… …
和/或sftp -o ControlPath=… …
和/或什至sshfs
(见下文)。只要您坚持选择的控制套接字 (ControlPath
) 并且主连接正常工作,这些命令就会使用它。玩得开心。例如,您可以稍后在脚本中运行
uid="$(ssh … "id -u someuser")"
和使用。$uid
最后
ssh -o ControlPath=… -O exit …
终止主连接。我的其他可能有用的答案:
sshfs
与共享控制套接字一起使用。答案包括一个关于占位符的有趣注释。sshfs
在一般情况下。