一、前言
1. 环境
- 客户端系统:win7
- securecrt版本:6.0.2
- 服务端系统:centos6.5
- 服务端ssh实现:openssh
2. 关于认证方式
我们知道ssh一般都会提供多种客户端认证方式,其中最常用的是密码和公钥认证方式,本篇主要讨论公钥认证方式。有关客户端认证的过程与原理,可以看另一篇文章:ssh的发展历程与基本原理。
二、使用公钥认证登陆的优点
1、公钥认证允许使用空密码,省去每次登录都需要输入密码的麻烦
2、多用户管理服务器时,可以通过多个公钥登录同一用户下,可以避免因为密码认证被用户都需要密码,导致的密码容易泄密的危险。并且使用passwd修改密码,也不会影响到其他用户的登录。
3、做空密码的公钥认证,为运维自动化提供了便捷方法。
三、生成公钥和私钥
以下是使用securecrt生成公钥和私钥的主要步骤,不用修改的界面就不放出来了,直接点下一步就是了。
选择公钥的类型为RSA:
因为我们不想输入通行密码,所以密码直接留空,注释框写上自己想标注的内容就行了:
到了这一步,就是生成公钥的时候了,注意框出来的内容,securecrt在生成公钥的时候会根据鼠标的移动数据作为随机的因素去生成,如果你到了这个界面切到别的地方去了,可能回来的时候发现进度条还没动过。
key的格式选OpenSSH,完成。
生成有两个文件,一个公钥文件(Identity.pub)一个私钥文件(Identity),需要把Identity.pub的内容追加到服务器的文件~/.ssh/authroized_keys中,如果.ssh目录不存在,就创建一个:
mkdir ~/.ssh chmod 700 ~/.ssh touch ~/.ssh/authroized_keys chmod 600 ~/.ssh/authroized_keys
注意:.ssh 目录的权限必须是0700,.ssh/authorized_keys 文件权限必须是0600,否则公钥认证不会生效。
四、服务端设置
我们想达成的目的有:
- 让客户端免密登陆
- 禁止客户端密码登陆
- 修改默认端口,避免外部攻击
1. 修改配置文件/etc/ssh/sshd_config
Port 1357 PermitRootLogin yes RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no
2. 重启sshd服务
service sshd restart
3. 如果有开防火墙,还需要修改防火墙配置
打开防火墙配置文件/etc/sysconfig/iptables,找到原来22端口的配置:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
把22改成你想要改成的端口,这里是1357,修改完保存配置并重启防火墙。
service iptables restart
关于iptables的原理和基本用法,有兴趣可以看看另外一篇:深入浅出iptables。
五、登陆服务器
建立连接,把公钥选项提前,并去掉密码登陆选项,然后点开公钥的属性选项。
选择使用会话公钥设置,然后选择自己的私钥文件,ok。
如果是第一次连接,会提示你去辨别是否接受这个新的host key,选接受并保存。
然后就可以直接登陆服务器了。
六、总结及注意
本文主要简述从securecrt生成公钥/密钥到免密登陆服务器的过程,总体来说比较简单。
不过有的细节不注意就可能导致失败,譬如:
- 客户端和服务端的ssh版本对不上
- 生成key的类型不对
- 服务端.ssh目录或者授权文件的权限不对
- 服务器sshd配置修改错误或者修改完没有重启sshd服务
- 防火墙配置没有修改,或者没有重启防火墙
七、参考
1. ssh 公钥认证方式登录
(完)