ssh-keygen: 系统找不到指定的路径
ssh-keygen: The System Cannot Find the Path Specified
ssh-agent, ssh-add 全部在 Cmder 上运行 运行 PowerShell/Posh-Git
我添加了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
执行此操作的一种方法是将其添加到您的路径中。
不幸的是,似乎无法添加仅 可执行文件。换句话说,您需要将整个 bin
文件夹(即 C:\Program Files\Git\usr\bin
)添加到您的路径。
我可以向您展示如何将整个目录添加到路径中,但我认为这不是您想要的。相反,下面是 仅 添加 ssh-keygen.exe
可执行文件的替代方法。
- 导航至
$env:homepath\Documents\WindowsPowerShell
(如果没有,请创建)。
- 创建一个名为
profile.ps1
. 的文件
- 将以下代码行添加到文件中。
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 加载到路径中,我也没有'想要覆盖 cp
、find
、ls
等工具...
- 创建一个可以添加到路径的文件夹。我在
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:\etc
和 c:\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
ssh-agent, ssh-add 全部在 Cmder 上运行 运行 PowerShell/Posh-Git
我添加了
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
执行此操作的一种方法是将其添加到您的路径中。
不幸的是,似乎无法添加仅 可执行文件。换句话说,您需要将整个 bin
文件夹(即 C:\Program Files\Git\usr\bin
)添加到您的路径。
我可以向您展示如何将整个目录添加到路径中,但我认为这不是您想要的。相反,下面是 仅 添加 ssh-keygen.exe
可执行文件的替代方法。
- 导航至
$env:homepath\Documents\WindowsPowerShell
(如果没有,请创建)。 - 创建一个名为
profile.ps1
. 的文件
- 将以下代码行添加到文件中。
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 加载到路径中,我也没有'想要覆盖 cp
、find
、ls
等工具...
- 创建一个可以添加到路径的文件夹。我在
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!
- 在 powershell 中,键入
编辑:
几天前我重新安装了我的电脑(使用 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:\etc
和 c:\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