客户端首先在服务器注册自己的公钥 在通过私钥进行登录验证 服务器会根据登录用户来用客户端注册的公钥进行匹配 匹配通过放行否则拒绝
1.通过ssh-keygen -t rsa -f 私钥文件 -C "email" 默认私钥匙文件~/.ssh/id_rsa 同时在该目录下会生成与之配对的公钥后缀为pub
生成密钥时会提示你输入密码 直接回车就可以 如果输入了密码 那么ssh登录时也要输入相同的密码方可登录
当有多台服务器且每台服务器ssh链接时用独立的密钥 又不想通过-i指定密钥文件 那么就配置个config吧
~/.ssh/config
如果需要增加用户的话
[root@VM_57_85_centos ~]#
useradd vip
[root@VM_57_85_centos ~]#
passwd vip
[root@VM_57_85_centos ~]# su vip
[vip@VM_57_85_centos ~]$ ssh-keygen -t rsa //会生成.ssh目录 和公私钥 不会生成
authorized_keys文件 需自己创建
[vip@VM_57_85_centos ~]$ touch
authorized_keys
[vip@VM_57_85_centos ~]$
chmod 600 authorized_keys
2.通过scp上传公钥到服务器
$
scp -P 8888 -i ~/key/app_server_access.pub ~/.ssh/id_rsa.pub [email protected]:~/.ssh/id_rsa_boss.pub
//如果服务器报错没有.ssh这个目录的话 上传到~目录
id_rsa.pub 100% 401 0.4KB/s 00:00
scp [参数] localFile remoteFile 或 scp [参数] remoteFIle localFile
-P port ssh端口号
-i identity_file
私钥文件
ssh和scp命令首先使用私钥文件如果密钥文件里的密钥不匹配 使用~/.ssh/id_rsa进行匹配 所以测试时需要注意
-P和-i 必须写在 localFile的前面 否则报错
3.ssh到服务器
$ ssh -p 8888 [email protected] -i
~/key/app_server_access
Last login: Mon Jan 1 19:30:54 2018 from 106.121.66.246
4.进入服务器密钥目录没有该目录则创建
[vip@VM_57_85_centos ~]$ mkdir .ssh
[vip@VM_57_85_centos rootx]$
chmod 700 .ssh
[vip@VM_57_85_centos ~]$ cd ~/.ssh
[vip@VM_57_85_centos .ssh]$
5.查看是否存在authorized_keys文件没有则创建该文件
该文件存储着允许访问服务器的密钥 当客户通过私钥登或公钥录时拿该文件里的公钥匹配验证 验证通过允许登录
6.把上传的公钥添加到
authorized_keys文件末尾
[vip@VM_57_85_centos .ssh]$ touch authorized_keys
[vip@VM_57_85_centos .ssh]$ chmod 600 authorized_keys
[vip@VM_57_85_centos .ssh]$ mv
id_rsa_boss.pub
ssh
[vip@VM_57_85_centos .ssh]$ cat
id_rsa_boss.pub
>> authorized_keys
//查看
authorized_keys最后一行 也就是刚才添加的key 其实只要没报错 没必要看
[vip@VM_57_85_centos .ssh]$ tail -1 authorized_keys
7.使用新密钥登陆
//测试ssh联通性
$ ssh -T [email protected]
[vip@VM_57_85_centos .ssh]$ rm -f
id_rsa_boss.pub //测试都通过了服务器上该文件也不需要了
$ ssh -p 1221 [email protected]
Last login: Mon Jan 1 19:45:24 2018 from 106.121.66.246
如果登录不成功查看
.ssh权限是不是700 authorized_keys权限是不是600
公钥是不是错的 用记事本去掉自动换行 确保公钥字串无空格且只有一行
如果还是登不了 管你有没有病
ssh-agent上起 在不行从头来过只要不进入死循环就ok了