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

时间:2015-09-04 05:35:40

标签: powershell ssh posh-git ssh-keygen

  • ssh-agent,ssh-add所有适用于运行PowerShell / Posh-Git的Cmder

  • 我添加了C:\Program Files\Git\usr\bin环境变量

  • ssh-keyen适用于Git Bash,

  • 如何让ssh-keygen与 Powershell / Posh-Git一起使用?

修改

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

因此,如下所述设置别名是要走的路。

我使用Set-Alias代替New-Alias,因为New-Alias要求我不时地重置我的$个人资料,这很奇怪。

要重置,请输入. $profile

3 个答案:

答案 0 :(得分:4)

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

很遗憾,似乎无法添加可执行文件。换句话说,您需要将整个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"
  5. 现在,每次启动Powershell时,Ssh-Keygen都可用。它甚至可以与标签完成一起使用(例如,键入ssh-并按Tab键,然后它会自动变为Ssh-Keygen)。

答案 1 :(得分:1)

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

  • 创建可添加到路径的文件夹。我在C:\dev\bin中创建了我的并将其添加到路径变量中。
  • 然后你需要将git bin文件夹中的所有dll文件符号链接到新的bin文件夹,因为你链接的工具需要它们在同一目录中(runpath不会成为git- bin-dir但是新的bin-dir)。我将在下面添加一个脚本来执行此操作。
  • 最后你只需要为你想在powershell中使用的所有工具创建符号链接(提示: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-folder
  • 中创建一个bash.bat文件
  • 将此内容写入.bat文件:

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

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

    • 在powershell中,键入bash,git-bash将在同一窗口内启动,可访问git-bin-folder中的所有git工具。
    • 想回到powershell?只需输入exit!

修改
我几天前(使用Win 10)重新安装了我的计算机,并在上面的解决方案中遇到了一些问题。显然,git中的git和/或cygwin环境已经更新,cygwin应用程序现在以不同的方式搜索它们的unix-environment-path。

例如,ssh总是说它无法找到我的主路径:

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等环境变量是行不通的,所以我只做了两个符号链接来满足我的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

答案 2 :(得分:0)

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

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

在Powershell中。如果您已经拥有SSH密钥,则不要生成新密钥,因为它们将被覆盖。仅当已将Git与Git Bash一起安装时,才能使用ssh-keygen命令。

运行上述命令时,它将在〜/ .ssh目录中创建2个文件。

〜/ .ssh / id_rsa-它是私钥或标识密钥。

〜/ .ssh / id_rsa.pub-公钥

查看链接generate ssh key