2
  • 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,这很奇怪。

要重置,请键入. $profile

4

3 回答 3

5

一种方法是将其添加到您的路径中。

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

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

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

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

于 2015-09-04T21:31:01.050 回答
1

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

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

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

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

    • 在 powershell 中,typebash和 git-bash 将在同一个窗口中启动,并可以访问 git-bin-folder 中的所有 git 工具。
    • 想回到powershell?只需键入退出!

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

比如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 这样的环境变量不起作用,所以我只做了两个额外的符号链接来满足我的 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
于 2015-09-06T05:04:15.103 回答
0

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

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

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

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

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

~/.ssh/id_rsa.pub - 公钥

请参阅链接生成 ssh 密钥

于 2019-06-11T19:52:39.070 回答