实现远程机器免密登录

Linux系统用ssh-keygen生成公私钥

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

在终端输入命令行

ssh-keygen -t rsa -C “test@zktest.com”
注意:标黄处邮箱可随意写格式正确即可
ssh-keygen -t rsa -m pem

  1. -t 表示私钥类型
  2. -C 表示注释,一般为自己的邮箱地址
  3. 更多参数如下:
  4. -b:指定私钥长度;
  5. -e:读取openssh的私钥或者公钥文件;
  6. -f:指定用来保存私钥的文件名;
  7. -i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
  8. -l:显示公钥文件的指纹数据;
  9. -N:提供一个新密语;
  10. -P:提供(旧)密语;
  11. -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/目录和文件进行如下配置:
机器远程免密登录命令:ssh -i id-res.pub
ssh-keyscan命令 – 收集主机的ssh公钥
ssh-keyscan命令是一个收集大量主机公钥的实用工具。它的目的是创建和验证“ssh_known_hosts”文件。
ssh-keyscan命令仅支持ssh协议版本1,在ssh协议版本2无法使用。
语法格式: ssh-keyscan [参数]
常用参数:

-4 强制使用IPv4地址
-6 强制使用IPv6地址
-f<文件名> 从指定文件中读取“地址列表、名字列表”对
-p<端口> 指定连接远程主机的端口
-T<超时时间> 指定连接尝试的超时时间
-t<密钥类型> 指定要创建的密钥类型
-v 信息模式,打印调试信息

参考实例

  1. 收集主机ssh公钥,并输出调试信息:
  2. [root@linuxcool ~]# ssh-keyscan -v 202.120.240.65
  3. 显示主机192.168.0.2RSA主机密钥:
  4. [root@linuxcool ~]# ssh-keyscan 192.168.0.2
  5. 显示主机192.168.0.2DSA主机密钥:
  6. [root@linuxcool ~]# ssh-keyscan -t dsa 192.168.0.2
  7. 打印调试信息:
  8. [root@linuxcool ~]# ssh-keyscan -v
  9. 强制使用IPv4地址:
  10. [root@linuxcool ~]# ssh-keyscan -4