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-----