Centos SSH免密码登录 - tuhaiyang/soft GitHub Wiki

SSH概述

SSH (全称:Secure Shell)是加密的网络传输协议,常用于远程登录服务器,执行命令。Windows下可以用SSH客户端进行远程连接。

SSH基于密码的安全验证,无法避免“中间人”攻击;而基于密钥(免密码)的安全验证能避免被攻击,方便服务器之间脚本进行访问、执行任务脚本或者传输文件而无需输入密码。

现在,假设有A、B两台Linux服务器,需要在A服务器免密码登录B服务器,可以进行如下操作。后面还会介绍A、B相互免密码访问的操作。

密钥配置

1.在主机A中生成密钥

登录主机A,输入ssh-keygen命令,如下所示:

#ssh-keygen
$ssh-keygen -t rsa
连续三次默认回车,结果如下图所示:

默认会在 ~/.ssh 目录下生成 id_rsa 和 id_rsa.pub 文件。id_rsa 是私钥文件,id_rsa.pub 是公钥文件。此处密钥文件位置和名称可以在上图中自己定义。

2.复制公钥到主机B

需要把主机A中生成的公钥id_rsa.pub添加到主机B中,输入以下命令:

#ssh-copy-id
$ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
输入主机B的密码,执行结果

注意

如果ssh不能登录主机B则不能使用 ssh-copy-id命令。可以把主机A的公钥 id_rsa.pub 里面的内容手动添加到主机B的 authorized_keys 文件中。authorized_keys 文件一般位于主机B中的.ssh目录中,文件权限为 600。

3.主机A免密码登录主机B

完成前面两步,主机A就可以免密码登录主机B,命令如下:

#ssh
$ssh [email protected]
#或者 -i 指定私钥文件位置
$ssh -i ~/.ssh/id_rsa [email protected]
扩展思路
以上步骤能实现主机A免密码访问主机B,如果需要主机B也能免密码访问主机A,按以上步骤在主机B执行即可。

如果需要主机C、主机D等都能免密码登录主机B,可以按以上流程每台机器都生成私钥,或者直接复制主机A的私钥到其他服务器的 .ssh 目录下,就可实现多服务器免密码访问主机B。

如果需要主机A免密码访问主机C、主机D等等,执行第2步到对应的机器或者在对应机器的 authorized_keys 文件中添加主机A的公钥 id_rsa.pub,就可实现主机A免密码访问多服务器。

可能遇到的问题

出现 Permissions 0644
可能是文件权限问题,设置私钥文件权限为 600即可。
chmod 600 ~/.ssh/id_rsa

现在使用命令 ssh-keygen -t rsa  生成ssh,默认是以新的格式生成,

id_rsa的第一行变成了“BEGIN OPENSSH PRIVATE KEY” 而不在 是“BEGIN RSA PRIVATE KEY”,
此时用来msyql、MongoDB,配置ssh登陆的话,
可能会报 “Resource temporarily unavailable. Authentication by key (/Users/youname/.ssh/id_rsa) failed (Error -16). (Error #35)”
提示资源不可用,这就是id_rsa 格式不对造成的

解决方法(一):

使用 ssh-keygen -m PEM -t rsa -b 4096 来生成

-m 参数指定密钥的格式,PEM(也就是RSA格式)是之前使用的旧格式

-b:指定密钥长度;

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

-C:添加注释;

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

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

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

-N:提供一个新密语;

-P:提供(旧)密语;

-q:静默模式;

-t:指定要创建的密钥类型

 

解决方法(二):

将密钥转换为PuTTy ppk格式并返回来解决

tempkey的内容:

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAA...
-----END OPENSSH PRIVATE KEY-----

转换为ppk格式:
puttygen tempkey -o tempkey.ppk

转换回openssh格式:
puttygen tempkey.ppk -O private-openssh -o tempkey.oldformat

tempkey.oldformat的内容:

-----BEGIN RSA PRIVATE KEY-----
MIIJJwIBAAKCAgEAzmmS5aA0....
-----END RSA PRIVATE KEY-----