平时工作学习必须要使用Windows,在SSH远程连接软件里Putty算是用得比较顺手的,而且很小巧。
但是每次输入密码很麻烦,还容易输错,OpenSSH可以利用密钥来自动登陆,如此一来方便了不少。配置过程分为三步:
1、生成公钥和私钥
先要下载一个叫puttygen的软件(下载见附件),在Windows端生成公钥和私钥。
点击Generate开始生成
在生成过程中用鼠标在进度条下面的空白处乱晃几下,产生随机性:
生成完毕,将私钥保存起来:
然后将公钥全选复制。
2、远程主机配置
我这里使用的是CentOS6.4,已经安装了OpenSSH,如果远程主机没有安装的,先要安装。
先连接上远程主机,然后输入命令
mkdir .ssh
chmod 700 .ssh
vim ~/.ssh/authorized_keys
按“i”键进入编辑模式(用过vi/vim的都应该知道吧),然后点鼠标右键将刚才复制的公钥粘贴进去,然后按“Esc”,输入wq<Enter>保存。
安全起见,设置验证文件为只读:
chmod 400 ~/.ssh/authorized_keys
3、Putty端配置
先到Connection-Data项设置自己的登陆用户名,如图(我的是root):
再点SSH项下面的Auth,添加第一步保存的私钥
然后很重要的是要回去Session项里保存!!!不然下次又得重新添加一遍
然后再双击Default Settings里保存的任务,就直接登陆进去了:
是不是很棒~
最后再优化一下显示设置(转过来的):
putty配置导出的方法
PuTTY 是一款小巧的开源 Telnet/SSH 客户端,但是它不提供设置的导入导出工具,PuTTY 将设置都保存在注册表中,所以要备份主要就是要备份注册表里的资料。
下面是备份步骤,实质上就是导出相应的注册表键值:
- 开始->运行(Win+R)->regedit
- 找到 HKEY_CURRENT_USER\Software\SimonTatham
- 在 SimonTatham 这个节点上点击右键,选择导出,保存。
如果你想恢复配置信息,只需要双击保存的这个文件,导入注册表信息即可。
说明:注册表PuTTY下的Sessions中保存设置连接的项目和设定值,SshHostKeys保存设置过的Remote Host Public Key。
KeepAlive
很多远程主机当你一段时间没有输入, 他就会把你踢下线, 所以需要 KeepAlive 功能,
如果填写 0 , 就表示不需要 KeepAlive 功能,
填写大于 0 的数, 比如 4, 就意味着每 4 秒就会发送一个空包到远程主机来 KeepAlive .
所以建议填写8秒左右的数.
SSH 证书登陆配置
sudo vi /etc/ssh/sshd_config
取消注释 : #AuthorizedKeysFile .ssh/authorized_keys
禁止密码登录 : 修改yes->no : PasswordAuthentication no
然后重启ssh : sudo service sshd restart
Putty server refused our key的三种原因和解决方法
server refused our key 是非常容易遇到的错误
1、.ssh文件夹权限错或authorized_keys权限错
.ssh 以及其父文件夹(root为/root,普通用户为Home目录)都应该设置为只有该用户可写(比如700)。
且 设置 authorized_keys 的权限为 400
chmod 700 .ssh
chmod 400 ~/.ssh/authorized_keys
以下为原因:
ssh服务器的key方式登录对权限要求严格。
- 对于客户端: 私钥必须为600权限或者更严格权限(400), 一旦其他用户可读, 私钥就不起作用(如640), 表现为系统认为不存在私钥
- 对于服务器端: 要求必须公钥其他用户不可写, 一旦其他用户可写(如660), 就无法用key登录, 表现为:Permission denied (publickey).
同时要求.ssh目录其他用户不可写,一旦其他用户可写(如770), 就无法使用key登录, 表现为:Permission denied (publickey).
2、SElinux导致
密钥文件不能通过SElinux认证,解决方法如下:
# restorecon -R -v /home #root用户为/root
我遇到的就是这种情况,找了好久还找到是这个原因,因为是新装的虚拟机,SElinux还没关闭。
这篇博文详细得说明了原因:http://www.toxingwang.com/linux-unix/linux-basic/846.html
3、sshd配置不正确
正确配置方法如下:
/etc/ssh/sshd_config
1、找到 #StrictModes yes 改成 StrictModes no (去掉注释后改成 no)
2、找到 #PubkeyAuthentication yes 改成 PubkeyAuthentication yes (去掉注释)
3、找到 #AuthorizedKeysFile .ssh/authorized_keys 改成 AuthorizedKeysFile .ssh/authorized_keys (去掉注释)
4、保存 5、/etc/rc.d/init.d/sshd reload 重新加载