MAC/LINUX GIT/GITLAB SSH 配置

2017-12-28 10:04:37来源:oschina作者:Sailor20人点击

分享
ssh公钥登录

一般在管理远程主机时,都用ssh登录,ssh [email protected],但是这样每次会使用密码。 使用ssh-keygen生成的密钥对,然后将公钥添加的目标主机的~/.ssh/authorized_keys文件中,当前主机就成为可信任的主机,下次使用ssh登录时,就不用输入密码了。


Gitlab,Github都支持这种方式的连接,具体操作步骤如下:


第一步:生成密钥对

进入主目录cd ~/.ssh, 如果不存在则在主目录cd ~下新建.ssh文件夹,然后使用ssh-keygen生成密钥对:ssh-keygen-t rsa-C"你的邮箱",这样就在主目录下的.ssh目录中生成了两个文件id_rsa和id_rsa.pub。id_rsa中保存的是私钥,id_rsa.pub中保存的是公钥。如果你已经有了一套名为id_rsa的公秘钥,可以生成另外一对公私钥,比如 id_rsa_xx,id_rsa_xx.pub,你也可以使用任何你喜欢的名字。


步骤如下:


第二步:生成公私钥

1、生成一个新的自定义名称的公私钥:


ssh-keygen -t rsa -C"你的邮箱地址"-f ~/.ssh/id_rsa_xx

三次回车,执行完成后,会在 ~/.ssh/目录下生成一个 id_rsa_xx和id_rsa_xx.pub 文件。


第二步:添加公钥

拷贝公钥到剪切板:mac下命令pbcopySSH Keys->Add new 页面中粘贴公钥,就添加完成了。


第三步:测试

ssh加-T选项测试目标服务是否可用:

ssh-T [email protected]"你的gitlab服务器地址"

第一次连接时,会询问是否信任主机,确认后输入yes。如果看到Welcome to GitLab, Rusher!就算配置成功了,接下来就可以通过ssh来提交代码了。



Windows

下载Git-Bash
生成密钥对ssh-keygen -t rsa -C "你的邮箱"
生成之后用notepad c:/User/Administrator/.ssh/id_rsa.pub打开文件,然后将公钥添加的Gitlab中.
测试ssh -T [email protected]"你的gitlab服务器地址"

扩展:ssh多用户切换

在配置Gitlab的时候一开始是用管理员账户做测试的,后来建了我自己的账号做开发。这样我的本地就有两个Gitlab账号,如果直接用ssh来提交代码有问题,因为ssh默认使用一开始生成id_rsa那个密钥对,但不同的账号又不能对应到同一个公钥上。如果多个账户一起用,还需要做些配置。


假如有两个账号:root和rusher。


第一步:为两个账户分别生成密钥对

提示在哪里存储密钥文件的时候,对不同的账号填不同的路径,root放在/Users/you/.ssh/id_rsa_gitlab_root下,guest的放在/Users/you/.ssh/id_rsa_gitlab_guest


# 1、生成guest用户的公私钥
ssh-keygen -t rsa -C"[email protected]"-f ~/.ssh/id_rsa_gitlab_guest# Generatingpublic/privatersa key pair.
# Enterfileinwhich to save the key(/Users/you/.ssh/id_rsa):/Users/you/.ssh/id_rsa_gitlab_guest
# Enterpassphrase(emptyfornopassphrase):
# Entersame passphrase again:
# Youridentification has been savedin/Users/you/.ssh/id_rsa_gitlab_guest.
# Yourpublickey has been savedin/Users/you/.ssh/id_rsa_gitlab_guest.pub.# 2、生成root用户的公私钥
ssh-keygen -t rsa -C"[email protected]"-f ~/.ssh/id_rsa_gitlab_root# Generatingpublic/privatersa key pair.
# Enterfileinwhich to save the key(/Users/you/.ssh/id_rsa):/Users/you/.ssh/id_rsa_gitlab_root
# Enterpassphrase(emptyfornopassphrase):
# Entersame passphrase again:
# Youridentification has been savedin/Users/you/.ssh/id_rsa_gitlab_root.
# Yourpublickey has been savedin/Users/you/.ssh/id_rsa_gitlab_root.pub.
添加ssh代理:

查看系统ssh-key代理,执行如下命令


ssh-add -l

 以上命令如果报错Could not open a connection to your authentication agent.则执行命令ssh-agent bash;如果输出The agent has no identities.则表示没有代理。如果系统有代理,可以执行下面的命令清除代理:


ssh-add -D

之后执行如下命令添加代理。


# 将guest用户添加到ssh代理
ssh-add/Users/you/.ssh/id_rsa_gitlab_guest
# 将root用户添加到ssh代理
ssh-add/Users/you/.ssh/id_rsa_gitlab_root

执行以上命令将看到如下信息你会分别得到如下提示:


2048 8e:71:ad:88:78:80:b2:d9:e1:2d:1d:e4:be:6b:db:8e /Users/aysee/.ssh/id_rsa (RSA)

 和


2048 8e:71:ad:88:78:80:b2:d9:e1:2d:1d:e4:be:6b:db:8e /Users/aysee/.ssh/id_rsa (RSA)

2048 8e:71:ad:88:78:80:b2:d9:e1:2d:1d:e4:be:6b:db:8e /Users/aysee/.ssh/id_rsa (RSA) 第二步:添加ssh配置文件

在.ssh目录中添加config文件,此文件的为不同的账户添加别名(root: root_gitlab 和 guest: guest_gitlab),连接还是同一个服务器,但是使用不同的密钥文件,所以才能将两个账号分开。


# for root
Hostroot_gitlab
HostNamegit.you.com
Userroot
IdentityFile/Users/you/.ssh/id_rsa_gitlab
# for guest
Hostguest_gitlab
HostNamegit.you.com
Userguest
IdentityFile/Users/you/.ssh/id_rsa_gitlab_guest

配置完成后,使用别名测试,可以查看是否对应到了正确的账号上:


ssh-T [email protected]_gitlab
ssh-T [email protected]_gitlab

你会得到如下提示,表示这个ssh公钥已经获得了权限


The authenticity of host 'gitlab.com (192.168.16.189)' can't be established.
ECDSA key fingerprint is SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw.
ECDSA key fingerprint is MD5:f1:d0:fb:46:73:7a:70:92:5a:ab:5d:ef:43:e2:1c:35.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'guest_gitlab,192.168.16.189' (ECDSA) to the list of known hosts.

如果报Bad owner or permissions on /home/you/.ssh/config错误,则执行命令sudo chmod 600 /home/you/.ssh/config解决


第三步:在git项目中使用别名

正常的项目,我们clone下来之后,origin对应的URL假设为:[email protected]:project/helloworld,现在需要做个改动,将git.you.com要换成guest_gitlab,


git remoteset-url origin [email protected]_gitlab:project/helloworld

如果是root用户的项目:


git remoteset-url origin [email protected]_gitlab:project/helloworld
Gitlab服务端配置

(只使用客户端可忽略这节内容)


在客户端提交时发现以下错误:


/usr/local/lib/ruby/1.9.1/net/http.rb:762:in`initialize': getaddrinfo: Name or service not known (SocketError)
from /usr/local/lib/ruby/1.9.1/net/http.rb:762:in `open'
from /usr/local/lib/ruby/1.9.1/net/http.rb:762:in `block in connect'
from/usr/local/lib/ruby/1.9.1/timeout.rb:54:in`timeout'
from /usr/local/lib/ruby/1.9.1/timeout.rb:99:in `timeout'
from /usr/local/lib/ruby/1.9.1/net/http.rb:762:in `connect'
from/usr/local/lib/ruby/1.9.1/net/http.rb:755:in`do_start'
from /usr/local/lib/ruby/1.9.1/net/http.rb:744:in `start'
from /home/git/gitlab-shell/lib/gitlab_net.rb:64:in `get'
from/home/git/gitlab-shell/lib/gitlab_net.rb:30:in`check'
from ./check:11:in `
'

在Github的issue里找到说先运行一下/home/git/gitlab-shell/bin/check。先做检测,发现和上面一样的错误。看错误是找不到域名,所以在/etc/hosts中需要配置一个地址的映射。


127.0.0.1YOUR_DOMIN# YOUR_DOMIN是在/home/git/gitlab-shell/config.yml中配置的gitlab_url

以上配置ssh的方法同样适用于Github,Bitbucket等网站。


参考文档Github Help

UPDATE 2013-08-16: 为不同账号生成密钥对后,需要使用ssh-add将密钥添加进来,否则ssh不能使用正确的密钥

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台