git的tortoisegit使用密钥连接服务器方法

作者:袖梨 2022-11-14

git是个好东西,tortoisegit也是个好东西。在Windows下使用tortoisegit用的比较多,而对命令行的时候比较少。

对于tortoisegit可以支持使用密钥有两种,一种是支持openssh的密钥,一种是支持putty的密钥。但是这两种不同,对于Linux的ssh一般都使用openssh,但是没关系,我们可以转换。

使用putty的密钥

我们来看看这样方式,在安装TortoiseGit的时候其实会让你选择默认使用的ssh客户端,默认情况下是使用TortoiseGitPlink这个客户端。

指定ssh的客户端为TortoiseGit


生成putty密钥

在安装tortoisegit的时候,默认还会安装有Puttygen.exe这个程序,这个程序是可以生成putty密钥的。

点击Generate按钮后会按一个进度条,然后鼠标不断在该程序内动,目的是生成一些随机数。

我第一次使用鼠标傻傻的不动,然后进度条非常的缓慢,我想这个东西生成一个密钥那么慢?原来是我打开的方式不对。

点击save private key保存putty的私钥,putty的密钥的后缀名是ppk。

在服务器上添加openssh公钥

我们在上面创建了putty的密钥对,现在需要将生成的公钥添加到服务器上。

其实这里也可以把公钥添加到github.com上,也是可以使用的。

putty生成的公钥是和openssh的的公钥是相同的,他们只是私钥不同
假设刚刚生成的公钥是


ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAi1vfwiNbamTPUOSpEWvQDYrefFcuPkUuZe5Y6r4l/xEAv7e9f5QDr6QEo215r2qBBnuixAgzpjZPSvr7S51qinuq6EyXm4kFGIW6B/L4zVjx5DKxofTno39xe58QQnAixoHNN9ccNhetcxEjp7gORo1k7AMuMuQY7V/6aekiOPfh6QsWuUMf6HZhZMqpu3q3xAqHlmOU5emAif4bQKZFghEYOftHZH+E+Yo+ed65KtOJ+V5PjPxD6RMGfx3A7MhsV5PXDijD7yu0b33r+mEDLoqRO1RDQUoviryBbuE4Gcu63a3J8+3GifXbrXOHzlMipAYtHxHjg5XuLGENlEmodw== rsa-key

登录到服务器的需要添加公钥的用户名下,比如user1这个用户名。

cd /home/user1/
mkdir .ssh #如果这个目录不存在
touch .ssh/authorized_keys #如果这个文件不存在
chmod 600 .ssh/authorized_keys #设置一下文件的权限
echo "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAi1vfwiNbamTPUOSpEWvQDYrefFcuPkUuZe5Y6r4l/xEAv7e9f5QDr6QEo215r2qBBnuixAgzpjZPSvr7S51qinuq6EyXm4kFGIW6B/L4zVjx5DKxofTno39xe58QQnAixoHNN9ccNhetcxEjp7gORo1k7AMuMuQY7V/6aekiOPfh6QsWuUMf6HZhZMqpu3q3xAqHlmOU5emAif4bQKZFghEYOftHZH+E+Yo+ed65KtOJ+V5PjPxD6RMGfx3A7MhsV5PXDijD7yu0b33r+mEDLoqRO1RDQUoviryBbuE4Gcu63a3J8+3GifXbrXOHzlMipAYtHxHjg5XuLGENlEmodw== rsa-key"
>> .ssh/authorized_keys #这个和上面是同一行的
注意:公钥在authorized_keys的文件形式是一行一个公钥,切记。否则该公钥不起作用。
在tortoisegit上使用密钥

公钥已经添加到服务器去了,接下来就是在客户端上设置密钥了。

在git clone的时候使用,如下设置:

git clone设置putty私钥
这样就可以搞定了。

putty密钥与openssh密钥转化

如果你有putty的私钥了,但是想在ssh客户端下使用openssh的私钥,再去生成一个openssh的密钥对比较麻烦(能偷懒就偷懒嘛)。

点击Conversions菜单项中的Import key
选择一个putty的私钥或者openssh的私钥
点击save private key保存为putty的私钥
或者点击菜单Conversions->Export OpenSSH Key保存为openssh的私钥


SSH登录一直失败

如果SSH登录一直失败,看看是否权限会有些问题


输入ssh连接代码


ssh -i private.key -v [email protected] -p22

从连接的信息中看不出有什么问题。

debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: publickey
debug1: Offering public key: private.key
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: password
已经提示说了,使用公钥登录,并且提供了私钥,但是还是提示让我输入密码。

但是我使用另外一个帐号去登录,发现是ok的,可以登录成功。我把成功的那个`authorized_keys`复制到我的那个用户名下,发现还是不能登录。但是验证了服务器的sshd功能是正常运行的,否则另外一个账户就没办法登录了。我觉得两个用户名的所在的环境应该是相同了,但是确实无法登录。

想到了客户端这里的连接没有更多有效的信息,那就想到了去服务器上看看相关的信息。`vim /var/log/secure`查看一下日志。发现有这么一段话:


Authentication refused: bad ownership or modes for directory /home/user/.ssh

上网搜了一下这个问题,发现原来是`.ssh`的目录权限不对,设置一下正确的权限:


chmod 700 ~/.ssh

在此过程中还学习到了一个sshd的测试模式。


/usr/sbin/sshd -p 10022 -d
-d 以调试模式运行。服务器将在前台运行并发送非常详细的调试日志信息,
服务器将只允许接入一个连接,并且不派生出子进程。仅用于调试目的。
使用多个 -d 选项可以输出更详细的调试信息(最多3个)。
会开启一个sshd的调试模式,新建一个10022端口,在客户端连接这个端口的时候,服务器端会有debug日志输出在屏幕上,这个时候就可以查看详细的信息。然后再针对信息进行解决。

## 总结
服务器用户对于ssh目录权限有一些权限要求,权限不对的话ssh无法工作,建议以下权限作为最小的权限。


chmod 700 .ssh # chmod 755 .ssh 也是可以的
chmod 600 .ssh/authorized_keys
chmod 400 .ssh/private.key #把密钥的权限也设置为最小
终于又可以愉快的编程了。

相关文章

精彩推荐