Git,使用特定私钥克隆,sh.exe 找不到文件
Git, clone with specific private key, sh.exe cannot find file
我做了一些脚本:
#!/bin/bash
#####
dest_branch="4.0.8_copy"
source="sprint24_copy"
#####
dest=$dest_branch
source=$source_branch
startDir=`pwd`
sshFile=$startDir"/git_ssh.ssh"
gitrepo="<some valid repo adress>"
git_key=$startDir"/key.ssh"
sshKey="-----BEGIN RSA PRIVATE KEY-----
MIIJJwIBAAKCAgEAs7Rfpca8s4.... and rest of key"
echo $sshKey > $git_key
echo "ssh -i "$git_key" $@ "> $sshFile
export GIT_SSH=$sshFile
export GIT_TRACE=1
git clone git@$gitrepo -b $dest
我 运行 这个脚本在 Git Bash (C:\Program Files\Git\bin\sh.exe) 中,这个脚本失败并出现这个错误:
Cloning into 'neos'...
10:44:26.575804 run-command.c:343 trace: run_command: 'C:/Users/<some user>/Desktop/<some dir>/git_ssh.ssh' 'git@<some valid adress>' 'git-upload-pack '\''<some project>'\'''
error: cannot spawn C:/Users/<some user>/Desktop/<some dir>/git_ssh.ssh: No such file or directory
fatal: unable to fork
我尝试将命令 pwd
更改为静态路径,如 C:/.... c:/... /c/... \c... c:... C: ……但还是失败了。 anybady 可以帮我指定另一个私钥来克隆 git repo 吗?为什么这个 sh.exe 看不到我的文件?我确定该文件存在。我使用 git 版本 2.6.4.windows.1。感谢您的帮助,对不起我的英语。
我试着理解问题。我有一些观察。
我用git.exe。 git.exe 使用 Windows 路径,但 MinGW 两者都使用,而 ssh 仅使用 linux :X
当我尝试使用 GIT_SSH='path to scrip' 时,git 会使用一些类似 ConvertToWindowsPatch(GIT_SSH) 的方法。终于 git 找到了脚本,但是现在 SSH 找不到密钥为 !
的文件
当我尝试 GIT_SSH='ssh -vvv' 进行调试时,我看到
bash: ssh: command not found
首先我认为 wtf... 但我看到 ssh 是一个别名!所以我使用 GIT_SSH='ssh.exe -vvv' 现在它起作用了。不幸的是,我无法解决 ssh 看不到我的文件的问题,但我知道,如果我将文件写入 C:\,那么在 C 中该文件不存在!该文件位于 C:\Users\\AppData\Local\VirtualStore 中。我不知道如何将我的 ssh 密钥保存在文件中并且 ssh 可以看到它,但我有其他解决方法。
在脚本的主要功能之前,我备份了.ssh 文件夹。然后我在 .ssh 中写 id_rsa,然后写 known_host。然后我想要 git 克隆,但是 ssh 问我关于密码短语的问题……但是这个密钥还没有通过!!好的,冷静下来。当我尝试 ssh.exe -vvv 时,我发现 sshKey 没有 header,因为我写的这个密钥没有换行符!我有这个:
echo $sshKey > $sshKeyFile
但正确的是
echo "$sshKey" > $sshKeyFile
现在一切正常。我看到 2 WTF - 首先 ssh 看不到 MinGW 中的文件,其次如果 ssh 看不到 header of key without -vvv 看不到这个但询问 pass (wtfwtfwtfwtfwtf...)
这是使用 MinGW、git 和 Windows 以及特定 rsa 在 bash 中操作 git 回购(合并、推送等...)的正确脚本私钥。我用它在 Windows 上自动合并并在 Jenkins 中创建分支。
#!/bin/bash
#####
dest_branch="4.0.8_copy"
source="sprint24_copy"
#####
dest=$dest_branch
source=$source_branch
sshDir="/c/Users/<user>/.ssh"
gitrepo="<repo>"
sshKeyFile=$sshDir"/id_rsa"
knownHostsFile=$sshDir"/known_hosts"
sshKey="-----BEGIN RSA PRIVATE KEY-----
MIIJKAIBAAKCAgEApH0bkaXa0z7811Sd1ZEG87adPPNWyaya47T3GrCjjnRvVyEk
N8jGjh/..."
knownHosts="<some host> ecdsa-sha2-nistp256 AAAAE2VjZ..."
if [ -a $sshDir ] ; then
echo "backup .ssh"
cp -r $sshDir $sshDir"_back"
echo "usuwanie starego .ssh"
rm -r $sshDir
echo "tworzenie nowego .ssh"
mkdir $sshDir
echo "zapis klucza rsa"
echo "$sshKey" > $sshKeyFile
echo "zapis znanyn hostów"
echo $knownHosts > $knownHostsFile
echo "wlaczenie debugu gita"
export GIT_TRACE=2
echo "wlaczenie debugu
echo "clone repo"
git clone git@$gitrepo -b $dest
#other git operations
echo "usuwanie tymczasowego .ssh"
rm -r $sshDir
echo "odtwrzanie z backupu .ssh"
cp -r $sshDir"_back" $sshDir
echo "usuwanie backupu"
rm -r $sshDir"_back"
fi
感谢您的帮助和评论!
我做了一些脚本:
#!/bin/bash
#####
dest_branch="4.0.8_copy"
source="sprint24_copy"
#####
dest=$dest_branch
source=$source_branch
startDir=`pwd`
sshFile=$startDir"/git_ssh.ssh"
gitrepo="<some valid repo adress>"
git_key=$startDir"/key.ssh"
sshKey="-----BEGIN RSA PRIVATE KEY-----
MIIJJwIBAAKCAgEAs7Rfpca8s4.... and rest of key"
echo $sshKey > $git_key
echo "ssh -i "$git_key" $@ "> $sshFile
export GIT_SSH=$sshFile
export GIT_TRACE=1
git clone git@$gitrepo -b $dest
我 运行 这个脚本在 Git Bash (C:\Program Files\Git\bin\sh.exe) 中,这个脚本失败并出现这个错误:
Cloning into 'neos'...
10:44:26.575804 run-command.c:343 trace: run_command: 'C:/Users/<some user>/Desktop/<some dir>/git_ssh.ssh' 'git@<some valid adress>' 'git-upload-pack '\''<some project>'\'''
error: cannot spawn C:/Users/<some user>/Desktop/<some dir>/git_ssh.ssh: No such file or directory
fatal: unable to fork
我尝试将命令 pwd
更改为静态路径,如 C:/.... c:/... /c/... \c... c:... C: ……但还是失败了。 anybady 可以帮我指定另一个私钥来克隆 git repo 吗?为什么这个 sh.exe 看不到我的文件?我确定该文件存在。我使用 git 版本 2.6.4.windows.1。感谢您的帮助,对不起我的英语。
我试着理解问题。我有一些观察。
我用git.exe。 git.exe 使用 Windows 路径,但 MinGW 两者都使用,而 ssh 仅使用 linux :X
当我尝试使用 GIT_SSH='path to scrip' 时,git 会使用一些类似 ConvertToWindowsPatch(GIT_SSH) 的方法。终于 git 找到了脚本,但是现在 SSH 找不到密钥为 !
的文件当我尝试 GIT_SSH='ssh -vvv' 进行调试时,我看到
bash: ssh: command not found
首先我认为 wtf... 但我看到 ssh 是一个别名!所以我使用 GIT_SSH='ssh.exe -vvv' 现在它起作用了。不幸的是,我无法解决 ssh 看不到我的文件的问题,但我知道,如果我将文件写入 C:\,那么在 C 中该文件不存在!该文件位于 C:\Users\\AppData\Local\VirtualStore 中。我不知道如何将我的 ssh 密钥保存在文件中并且 ssh 可以看到它,但我有其他解决方法。
在脚本的主要功能之前,我备份了.ssh 文件夹。然后我在 .ssh 中写 id_rsa,然后写 known_host。然后我想要 git 克隆,但是 ssh 问我关于密码短语的问题……但是这个密钥还没有通过!!好的,冷静下来。当我尝试 ssh.exe -vvv 时,我发现 sshKey 没有 header,因为我写的这个密钥没有换行符!我有这个:
echo $sshKey > $sshKeyFile
但正确的是
echo "$sshKey" > $sshKeyFile
现在一切正常。我看到 2 WTF - 首先 ssh 看不到 MinGW 中的文件,其次如果 ssh 看不到 header of key without -vvv 看不到这个但询问 pass (wtfwtfwtfwtfwtf...)
这是使用 MinGW、git 和 Windows 以及特定 rsa 在 bash 中操作 git 回购(合并、推送等...)的正确脚本私钥。我用它在 Windows 上自动合并并在 Jenkins 中创建分支。
#!/bin/bash
#####
dest_branch="4.0.8_copy"
source="sprint24_copy"
#####
dest=$dest_branch
source=$source_branch
sshDir="/c/Users/<user>/.ssh"
gitrepo="<repo>"
sshKeyFile=$sshDir"/id_rsa"
knownHostsFile=$sshDir"/known_hosts"
sshKey="-----BEGIN RSA PRIVATE KEY-----
MIIJKAIBAAKCAgEApH0bkaXa0z7811Sd1ZEG87adPPNWyaya47T3GrCjjnRvVyEk
N8jGjh/..."
knownHosts="<some host> ecdsa-sha2-nistp256 AAAAE2VjZ..."
if [ -a $sshDir ] ; then
echo "backup .ssh"
cp -r $sshDir $sshDir"_back"
echo "usuwanie starego .ssh"
rm -r $sshDir
echo "tworzenie nowego .ssh"
mkdir $sshDir
echo "zapis klucza rsa"
echo "$sshKey" > $sshKeyFile
echo "zapis znanyn hostów"
echo $knownHosts > $knownHostsFile
echo "wlaczenie debugu gita"
export GIT_TRACE=2
echo "wlaczenie debugu
echo "clone repo"
git clone git@$gitrepo -b $dest
#other git operations
echo "usuwanie tymczasowego .ssh"
rm -r $sshDir
echo "odtwrzanie z backupu .ssh"
cp -r $sshDir"_back" $sshDir
echo "usuwanie backupu"
rm -r $sshDir"_back"
fi
感谢您的帮助和评论!