客户端:
OS:mac
SOft:iTerm2
服务端:
OS:CentOS
需求:
本地无需密码登录至远程服务器,并且远程服务器不允许使用密码登录。防止ssh暴力破解
第一步:
本地生成公钥及私钥
ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #密钥的保存位置
Enter passphrase (empty for no passphrase): #密钥短语
Enter same passphrase again: #重复密钥短语
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub. #已经生成了公钥和私钥文件
-b 4096 采用长度为4096字节的公钥/私钥对,最长4096字节,一般1024或2048就足够满足安全需要了,太长的话加密解密需要的时间也增长。默认是2048字节
-t rsa 采用rsa加密方式的公钥/私钥对,除了rsa还有dsa方式,rsa方式最短不能小于768字节长度。
输入密码短句 Enter passphrase (empty for no passphrase) ,密码短句(passphrase)是你使用一个短语或者一句话作为密码输入,再由系统内部的加密或是散列算法生成虚拟密码后,进行下一步的认证。好处是增强了安全性不易被破解。
如果还需要使用更多其他参数请参考man ssh-keygen
或 ssh-keygen --help
。
完后成后生成两个文件id_rsa
(私钥)和id_rsa.pub
(公钥)
也可以将本地的id_rsa.pub用拷贝到远程主机的.ssh目录。然后合并
scp id_rsa.pub root@远程服务器IP:~
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
第二步:
配置服务器公钥
登录你的远程linux服务器,在~/.ssh/
目录下编辑authorized_keys
文件,没有对应的目录或文件就创建一下。
将第一步中生成的id_rsa.pub
文件内容复制,追加到authorized_keys
文件后。注意单独一行
。复制过去的密钥也必须是一行
。一行,一行,一行。重要的多说几遍。。。
第三步:
设置文件权限
chmod -R 600 ~/.ssh
第四步:
设置服务器的ssh配置文件
vi /etc/ssh/sshd_config
将对应配置修改
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
这三行前面的#
号注释去掉
第五步:
修改本地ssh登录,因为我是mac机器,自带的有。windows可以用其它软件连接
修改本地.ssh目录下的config文件,增加主机信息
Host alias lvtao
HostName www.lvtao.net
Port 22
User lvtao
IdentityFile ~/.ssh/id_rsa
alias是别名,可用于命令ssh lvtao
这样的形式
IdentifyFile是你的本地
生成的私钥
地址。
第六步:
测试连接
ssh lvtao
第一次可能会询问你要一次密码,以后就不用了。。。
如果登录成功,退出后再试一次是不是不要密码了。。。
第七步:
以上都成功了之后,我们将远程服务器的密码登录功能去掉
vi /etc/ssh/ssh_config
找到
PasswordAuthentication yes
修改成
PasswordAuthentication no
保存并重启sshd服务
service sshd restart