账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    windows下SSH无法创建已知主机目录,哪里出了问题?
    40
    0

    问题描述

    尝试SSH Git 仓库时出现问题,原因暂未知,目前推测与编码格式有关

    最明显的特点是每次SSH时会尝试创建一个乱码目录

    环境

    • windows 10 1809
    • powershell
    • 其他sh也尝试过
    • 尝试了WSL没有出现同样的问题

    相关代码

    错误输出如下

    ssh -T git@gitee.com
    Could not create directory 'C:\\Users\\\345\221\250\345\207\241\346\230\237/.ssh'.
    The authenticity of host 'gitee.com (120.55.226.24)' can't be established.
    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 在Windows下,SSH无法创建已知主机目录的常见问题可能包括以下几个方面:

      1. 权限问题
      2. 确保你的SSH客户端(如PuTTY,SecureCRT等)具有足够的权限来访问已知主机的目录。如果这些客户端没有足够的权限,它们将无法创建或访问该目录。
      3. 检查你的权限设置。确保你的SSH客户端具有访问给定目录的权限。在Windows上,你可以在命令行中使用Get-SCSC权限Get-ADFSPermission命令来检查目录的权限。

      bash Get-SCSC -ServerIP <SSH服务器IP> -Path "C:\path\to\directory" Get-ADFSPermission -Identity <username> -Group <group_name> -Path "C:\path\to\directory"

      其中,<SSH服务器IP>是你要连接的SSH服务器的IP地址,<path\to\directory>是你要访问的已知主机的目录路径。

      1. 目录不存在
      2. 确保你正在访问的已知主机的目录存在。你可以通过使用Get-ChildItem命令来检查目录是否存在,或者在Windows PowerShell中使用dir命令来列出目录及其内容。

      bash Get-ChildItem -Path "C:\path\to\directory" | dir

      如果目录不存在,Get-ChildItem命令将返回一个NonExistentDirectory错误。在这种情况下,你需要确保目录确实存在并具有正确的权限才能访问它。

      1. 未定义的用户或组
      2. 检查你的SSH客户端是否连接到正确的用户或组。确保你的客户端已连接到root用户或组,并且该用户或组具有权限访问给定目录。

      bash PS C:\> $user = "root" PS C:\> $group = "root" PS C:\> Get-SCSC -ServerIP <SSH服务器IP> -Path "C:\path\to\directory" -User $user -Group $group

      在上述命令中,$user$group是你要连接的SSH客户端使用的用户或组的名称。Get-SCSC命令会连接到root用户或组,并检查目录是否存在。

      1. SSH版本不兼容
      2. 如果SSH客户端的版本与服务器的版本不兼容,它可能无法连接到已知主机的目录。例如,某些版本的SSH客户端可能不支持目录递归操作,或者在某些情况下可能无法处理高级目录权限。

      为了修复这个问题,你可以升级你的SSH客户端版本。在Windows上,你可以在命令行中使用New-SSHSession -ComputerName <SSH服务器IP> -User <username> -Port <SSH端口号>来连接到新版本的SSH客户端。然后,你可以使用Get-SCSC命令或Get-ADFSPermission命令来检查目录是否存在,并在目录存在时创建或访问它。

      bash New-SSHSession -ComputerName <SSH服务器IP> -User <username> -Port <SSH端口号> Get-SCSC -ServerIP <SSH服务器IP> -Path "C:\path\to\directory" -User <username>

      如果SSH客户端的版本与服务器的版本不兼容,上述命令将提示你更新客户端版本。

      1. 网络连接问题
      2. 如果SSH客户端的网络连接存在问题,例如网络错误,可能会影响连接到已知主机的目录。网络连接问题可能包括网络连接断开,防火墙设置阻止SSH连接,或者网络延迟或其他网络问题。

      为了解决这个问题,你可以尝试以下步骤: - 检查网络连接。确保你的客户端和SSH服务器之间有稳定的网络连接,并且网络连接没有被断开。 - 检查防火墙设置。确保防火墙没有阻止SSH连接,或者防火墙设置允许SSH连接到指定的IP地址。 - 如果网络连接正常,检查你的防火墙策略是否允许SSH访问已知主机的目录。在Windows防火墙中,你可以查看“例外”或“信任”列表,以查找允许SSH访问已知主机的目录的IP地址。

      在上述步骤中,你需要找到防火墙设置中的允许SSH访问已知主机的目录的IP地址,并将其添加到允许SSH连接的列表中。

      1. SSH配置问题
      2. 有些SSH服务器可能不支持创建已知主机的目录。例如,某些服务器可能不允许在已知主机上创建目录,或者服务器可能不支持递归操作,导致无法创建目录或访问目录中的子目录。

      为了解决这个问题,你可以尝试以下步骤: - 检查你的SSH服务器的配置。确保你的SSH服务器允许在已知主机上创建目录,并且可以使用递归操作。如果SSH服务器不支持递归操作,你可以使用Get-SCSC命令或Get-ADFSPermission命令来检查目录是否存在,并在目录存在时创建或访问它。 - 在Windows PowerShell中,你可以使用New-SCSC -ServerIP <SSH服务器IP> -User <username> -Path "C:\path\to\directory" -ParentPath "C:\path\to\parent_directory"来创建一个已知主机的子目录。

      在上述命令中,<SSH服务器IP>是你要连接的SSH服务器的IP地址,<username>是你要连接的SSH客户端使用的用户名,<path\to\directory>是你要创建的已知主机的子目录路径,<path\to\parent_directory>是你要创建的已知主机的父目录路径。

      请注意,对于上述命令,<path\to\parent_directory>应该替换为已知主机的实际父目录路径。如果父目录不存在,New-SCSC命令将返回一个FileDoesNotExist错误。在这种情况下,你需要确保父目录确实存在并具有正确的权限才能创建子目录。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部