我正在使用C#和Renci.SshNet打开SFTP连接。我可以很好地获取文件的属性,包括文件的所有者和组。然而,它们是整数,并且弄清楚用户可以做什么需要知道他们的用户ID和组ID。这是从Windows机器上完成的,因此信息不易获得。如何在没有用户在* nix机器上手动运行id -u
和id -g
的情况下获取用户标识和组ID?使用SFTP获取用户名和组名
0
A
回答
0
Renci SSH.NET库使用SFTP协议版本3.在此版本的协议中,只有GID和UID号码作为不同的值提供。
用户名和组名在SFTP协议版本4和更新版本中提供。但是,即使SSH.NET确实支持这个版本的协议,它也没有什么帮助,因为大多数SFTP服务器(特别是OpenSSH)只支持版本3。
有一个在SFTP 3版本,其中OpenSSH服务器提供的* nix ls
般的记录文件中的上市提供了longname
领域。所以它包含用户名和组名。只是记录的格式是平台特定的。 SSH.NET只是忽略了这个字段,并没有试图解析它(实际上它不会被解析)。见注释“这个字段的值无意义的信息”,在SftpNameResponse.LoadData()
:
protected override void LoadData()
{
...
for (int i = 0; i < this.Count; i++)
{
var fileName = this.ReadString(this.Encoding);
this.ReadString(); // This field value has meaningless information
...
}
}
如果你真的需要的价值,你可以考虑切换到WinSCP .NET assembly,它采用了longname
领域,并暴露用户名以及RemoteFileInfo
class的.Owner
和.Group
属性中的组名称。
使用Session.ListDirectory
检索列表。
RemoteDirectoryInfo directory = session.ListDirectory("/home/martin/public_html");
foreach (RemoteFileInfo fileInfo in directory.Files)
{
Console.WriteLine("{0} owned by {1}:{2}",
fileInfo.Name, fileInfo.Owner, fileInfo.Group);
}
如果您的服务器支持它,WinSCP支持SFTP版本4-6。
(我是WinSCP的作者)
相关问题
- 1. 使用URI :: URL从SFTP URL中提取用户名和密码
- 2. Hadoop从linux shell用户名和组映射获取用户名和组映射?
- 3. 获取用户名和域名在C++
- 4. 获取Facebook'用户名'或'用户名'
- 5. Perl:从stat获取用户名和组名commad
- 6. sftp登录私钥和公钥没有用户名和域名
- 7. LDAP通过用户名和域名获取用户DN
- 8. 获取用户名和域名(域\用户)在ASP.Net C#
- 9. 获取用户名为当前用户名的行的总和
- 10. Twitter搜索Api获取用户名和用户真实姓名
- 11. 获取用户名和ASP.NET通用Hanlder
- 12. Java获取一组用户名
- 13. 使用WMI获取当前用户名
- 14. 使用AuthSub c#获取用户名?
- 15. 使用Windows Azure获取Facebook用户名
- 16. 使用C获取Facebook用户名#
- 17. 使用ActiveX获取用户名
- 18. 如何在NetSqlAZMAN中获取应用组,SID和用户名
- 19. 获取用户名和上传文件
- 20. 获取用户名和访问令牌
- 21. 获取windows用户名和javascript
- 22. 获取用户名和密码
- 23. Facebook和JavaScript - 获取用户名
- 24. Facebook和php - 获取用户名
- 25. 从URI获取用户名和密码
- 26. Codeigniter:获取用户名和ID
- 27. 获取Windows用户名和密码
- 28. 从HttpServletRequest获取用户名和密码
- 29. spring-ws获取用户名和密码
- 30. 从twitter获取用户名和姓氏