项目开发过程中我们经常需要用git从远程代码库拉取代码到本地,或者需要从一台服务器端登录另一台服务器,这些情况下都需要知道远程代码库或者服务器的账号和密码。有没有一种方法可以不用每次连接远程机器的时候都输入账号和密码呢?答案是有的,这就是利用ssh-keygen生成本地机器的公钥和私钥对,将公钥提交给远程机器作为身份验证,远程机器通过公钥对本地机器进行身份验证成功之后,就可以实现无密码连接远程机器。

在终端输入命令行

ssh-keygen -t rsa -C "your_email@youremail.com"

-t 表示私钥类型
-C 表示注释,一般为自己的邮箱地址

更多参数如下:

-b:指定私钥长度;

-e:读取openssh的私钥或者公钥文件;

-f:指定用来保存私钥的文件名;

-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;

-l:显示公钥文件的指纹数据;

-N:提供一个新密语;

-P:提供(旧)密语;

-q:静默模式;

公私钥对生成过程中会提示输入passphrase口令,这里根据自己的需要输入两次一样的口令,或者留空即可。

如果没有指定-f参数,则会在~/.ssh/目录下生成id_rsa(私钥)和id_rsa.pub(公钥)两个文件。如果-t参数指定为dsa,则生成id_dsa和id_dsa.pub两个文件(下文以rsa为例)。切忌把私钥透露给任何人。

到此,本地机器的公私钥对就生成完成了。

下面看看如何免密码从远程代码库拉取代码和免密码登录远程机器。

一、免密码拉取代码库代码。

1.复制~/.ssh/id-rsa.pub全部内容。

2.登录gitlab,进入Profile Settings->SSH Keys->ADD SSH KEY,在key表单输入id-rsa.pub的全部内容,Title表单随便填写一个title。点击ADD KEY保存ssh key的配置。

3.回到本地机器,终端git clone 远程代码git地址,即可拉取代码库内容了。

二、免密码登录远程机器

1.复制~/.ssh/id-rsa.pub全部内容。

2.登录远程机器,进入远程机器的~/.ssh/目录,创建authorized_keys文件,将本地机器的id-rsa.pub文件全部内容黏贴到远程机器的authorized_keys文件中,保存。

3.回到本地机器,终端输入#ssh 远程IP地址。即可实现免密码登录远程机器。

可能出现的问题:

有时会出现正确配置公私钥对之后仍无法登录远程机器的情况,此时需登录远程机器对~/.ssh/目录和文件进行如下配置:

chmod 600 authorized_keys #设置authorized_keys权限
chmod 700 -R .ssh #设置.ssh目录权限

要保证.ssh和authorized_keys都只有用户自己有写权限。权限开太大反而会验证失败。