ssh-keygen: 系统找不到指定的路径

ssh-keygen: The System Cannot Find the Path Specified

编辑:

事实证明,错误是由于 PowerShell 中的 ssh-keygen 是 运行 ssh-keygen.bat 文件而不是 ssh-keygen.exe

因此,如下所述设置别名是可行的方法。

我使用 Set-Alias 而不是 New-Alias,因为 New-Alias 要求我不时地重置我的 $profile,这很奇怪。

要重置,请键入 . $profile

执行此操作的一种方法是将其添加到您的路径中。

不幸的是,似乎无法添加 可执行文件。换句话说,您需要将整个 bin 文件夹(即 C:\Program Files\Git\usr\bin)添加到您的路径。

我可以向您展示如何将整个目录添加到路径中,但我认为这不是您想要的。相反,下面是 添加 ssh-keygen.exe 可执行文件的替代方法。

  1. 导航至 $env:homepath\Documents\WindowsPowerShell(如果没有,请创建)。
  2. 创建一个名为 profile.ps1.
  3. 的文件
  4. 将以下代码行添加到文件中。
    New-Alias Ssh-Keygen "C:\Program Files\Git\usr\bin\ssh-keygen.exe"

现在,每次启动 Powershell 时,Ssh-Keygen 都可用。它甚至可以使用制表符完成(例如键入 ssh- 并按制表符,然后它会自动变为 Ssh-Keygen)。

实际上,您可以将git bin 文件夹中的单个可执行文件添加到您的路径,方法是将它们symlinking 到包含在你的路径变量。
我还想在 powershell 中使用一些 git 工具,但我不想每次想使用其中一个工具时都将 git-bin-folder 加载到路径中,我也没有'想要覆盖 cpfindls 等工具...

  • 创建一个可以添加到路径的文件夹。我在 C:\dev\bin 中创建了我的并将其添加到路径变量中。
  • 然后您需要将 git bin 文件夹中的所有 dll 文件同步 link 到您的新 bin 文件夹,因为您将 link 需要的工具在同一文件夹中目录(运行路径不会是 git-bin-dir,而是新的 bin-dir)。我将在下面添加一个脚本来执行此操作。
  • 最后你只需要为你想在 powershell 中使用的所有工具创建 symlinks(提示:ssh.exe 在 powershell 中使用真的很好;))

这是我的 powershell 函数,可以帮助您使用来自 git:

的所有优秀工具设置新的 bin 文件夹
# generic symlink function
function Create-Symlink {
    param(
        [string]$link,
        [string]$target
    )

    & cmd.exe /c mklink "$link" "$target"
}

# symlink all teh git dlls
function Create-GitDllSymlinks {
    param(
        [string]$newBinDir='C:\dev\bin',
        [string]$gitBinDir='C:\Program Files (x86)\Git\bin'
    )

    $dlls = gci $gitBinDir -Filter *.dll

    $dlls | foreach {
        Create-Symlink -link (join-path $newBinDir $_.Name) -target $_.FullName
    }
}

# to easily link your git tools
function Create-GitSymlink {
    param(
        [string]$executable,
        [string]$newBinDir='C:\dev\bin',
        [string]$gitBinDir='C:\Program Files (x86)\Git\bin'
    )

    if (-not $executable.EndsWith('.exe')) {
        $executable = ($executable + '.exe')
    }

    Create-Symlink -link (join-path $newBinDir $executable) -target (join-path $gitBinDir $executable)
}

# create all dll symlinks needed
Create-GitDllSymlinks
# link ssh and ssh-keygen to use in powershell
Create-GitSymlink -executable ssh-keygen
Create-GitSymlink -executable ssh

另一件好事是:

  • 在新的 bin 文件夹中创建一个 bash.bat 文件
  • 将其写入 .bat 文件:

    "C:\Program Files (x86)\Git\bin\sh.exe" --login -i

  • 在powershell和bash之间快速切换:

    • 在 powershell 中,键入 bash 和 git-bash 将在同一个 window 中启动,并可以访问 [中的所有 git 工具=74=]-bin-文件夹。
    • 想回到 powershell 吗?只需输入 exit!

编辑:
几天前我重新安装了我的电脑(使用 Win 10)并且 运行 遇到了上面我的解决方案的一些问题。显然,git and/or git 中的 cygwin 环境已经更新,cygwin 应用程序现在以不同的方式搜索它们的 unix 环境路径。

比如ssh总是说找不到我的home路径:

Could not create directory '/home/myuser/.ssh'.
The authenticity of host 'hostx (IP)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxx.
Are you sure you want to continue connecting (yes/no)?

使用 procmon 我发现,它正在寻找 c:\etcc:\home\myuser 中的文件。设置像 HOME 或 USERPROFILE 这样的环境变量没有用,所以我只做了两个额外的 symlinks 来满足我的 cygwin 工具:

PS bin # cmd /c mklink /D C:\etc "C:\Program Files\Git\etc"
symbolic link created for C:\etc <<===>> C:\Program Files\Git\etc
PS bin # cmd /c mklink /D C:\home "C:\Users"
symbolic link created for C:\home <<===>> C:\Users

我通过使用命令生成自己的 ssh 密钥对解决了这个问题

$ ssh-keygen -t rsa -C "your_email@mail.com"

在 powershell 中。如果您已经有 SSH 密钥,则不要生成新密钥,因为它们会被覆盖。您可以使用 ssh-keygen 命令,前提是您安装了 Git 和 Git Bash.

当你运行上面的命令时,它会在 ~/.ssh 目录中创建 2 个文件。

~/.ssh/id_rsa − 私钥或识别密钥。

~/.ssh/id_rsa.pub − public 键

见linkgenerate ssh key