lenchio 2013-08-15
引自:http://www.opsers.org/videos/xshell-through-ssh-key-ssh-proxy-to-connect-linux-server-detailed.html
使用SSH客户端来登陆Linux系统,我相信大家肯定都用过,只是选择的SSH客户端的软件不同而已,在Windows系统下,用的比较多就应该 就是PUTTY,SecureCRT,Xshell这三个吧。大家是不是曾经在进行服务器管理的时候,会遇到一些交互的处理问题,比如说自动化的命令需要 密码的时候,我们就不能自动完成。所以我们会用到关于SSH密钥的一些问题,那么我今天就以Xshell为例,来给大家讲解一下如何用SSH登陆,而无需 输入密码。当然,也可以通过Linux系统上的SSH来实现此功能,只是实现的方法略有不同。后面我也做个简单的教程出来供大家分享。
在开始正式内容之前,我们先来看看Xshell的一个基本设置:新增一个会话(new session)
OK,现在我们进入我们今天的内容。这里做一个说明:系统为RHEL6,我们把他当作Linux服务器,本文由普通的用户名+密码认证、密钥认证、 密钥+输入密钥密码认证、代理认证ssh-agent(密钥+密钥密码+无需密码输入)这四个内容来给大家讲解,希望能给大家一个抛砖引玉的作用。
这个不用多说,默认情况下,都是用用户名和密码来认证登陆的,自行增加一个会话,每次连接的时候,打开会话就OK了,具体的设置,可能参考上面的关 于Xshell的基本设置。所以我们就略过,不过,如果说,你连这个都搞不定的话,那么,下面的内容也就无法时行下去了。哈哈……
所谓的密钥认证,就是在本地配置一个私钥和一个公钥,然后把公钥传要你想连接的服务器,就能实现无需输入用户名和密码的目的。这个就如同是制造了一 个钥匙(私钥)和一把锁(公钥)一样,而这把锁可以复制到多台服务器,这样我只要用我的这个钥匙,就可以打开多个服务器的锁了。所以说,要启用密钥认证, 关键就是制造钥匙和锁。下面就来看看,在Xshell上如何来制造。
选中我们新创建的会话,对其属性进行更改
Xshell自动创建密钥文件
设置密钥文件名,我们这里先不为密钥设置密码
保存公钥文件
选择刚刚创建的私钥
设置登陆的用户
这样,我们就有了一个公钥和私钥了,接下来,就是把生成的公钥上传到服务器了。
我们直接用Xshell自带的一个sftp功能来上传我们生成的文件(我把公钥文件保存在我的WIN7系统桌面上)
打开Xshell后,应该出现下面的提示符
Xshell:\>
我们需要设置一下本地的工作目录,方便我们上传文件(如下图)
我们用sftp来连接远程的服务器,然后上传我们的公钥文件
Xshell:\> sftp [email protected]
这时候不要选择私钥登陆啊,因为我们还没有进行配置,所以必需使用密码登陆(如图)
Connecting to 192.168.6.10:22…
Connection established.
Escape character is ‘^@]’.
Your current local directory is
C:\Users\Administrator\Desktop
Type `help’ to browse available commnands.
sftp:/root>
出面上面的提示,就表示我们登陆上服务器了,关于SFTP的命令命令,大家可以用help来查看帮助。下面我们就向服务器传文件了
我们在服务器的root目录下保存我们的公钥,当然,你可以放到其他的位置,只是这个文件的位置,我们需要记住,因为后面的SSHD设置需要他。
sftp:/root> put id_rsa_2048.pub
Uploading id_rsa_2048.pub to remote:/root/id_rsa_2048.pub
sftp:/root/.ssh> exit
OK,我们上传上去了,下面我们就用SSH的普通方法(用户名和密码)登陆服务器,然后修改我们的sshd_config配置文件,启用密钥认证,关闭用户名、密码认证。
Xshell:\> ssh [email protected]
还是先用用户名密码来登陆
[root@yufei ~]# vim /etc/ssh/sshd_config
启用下面两个内容,并设置好相应的公钥文件位置
PubkeyAuthentication yes
AuthorizedKeysFile /root/id_rsa_2048.pub
关于密码认证,我们暂时先不关闭,以防万一啊!!
也就是PasswordAuthentication yes这个先不禁止。
保存退出后,重新启动SSHD服务
[root@yufei ~]# service sshd restart
注意:如果你的系统是RHEL6,并且没有关掉SELinux的话,在登陆的时候,你会发现始终需要你输入密码,而我们并没有设置密码啊,这是为什么呢? 刚开始的时候我也很奇怪,我在RHEL5上测试是正常的,可一到RHEL6上就是不行,折腾了半天,发现是SELinux惹的祸啊!没有关系,我们关闭掉 他就OK了。
[root@yufei ~]# setenforce 0
[root@yufei ~]# exit
这时候,你就可以重新换用密钥方式登陆了,已经无需输入任何密码。
和上面是一样的,只是在创建证书的时候,输入密码就可以了,注意,一定要把原来客户端的证书文件换成现在的,如果还是用以前的话,会导致你远程的SSH登陆不上系统了。
设置了密钥的密码后,在使用密钥登陆的时候,就需要输入相应的密钥密码,输入后,就能正常登陆了。但这虽然增加了安全性,但他的交互性又没有了,想要既使用密钥+密钥密码方式来登陆,又不输入密码,就需要用ssh-agent来实现。
在上面认证的基础上,我们在服务器上再次配置sshd_config文件
开启
AllowAgentForwarding yes
重新启动
然后在Xshell中开启Agent方式
只要上面的没有问题,那么我们就可以用Xshell再次登陆测试了,这次登陆,只需要输入一次密钥密码,以后都无需再输入密码了。
大家觉得这个可能实用性不太大,但如果我们在Linux系统上管理其他多台Linux服务器的时候,你会发觉真的很方便,关于在Linux系统上, 如何来实现上面的功能,我将在下一篇文章中给出。如果说,你对此文有什么疑问的话,请与我留言。本文第二个写的比较详细,而后面两个比较简单,如果你领会 了第二个的话,那么剩下的两种就没有什么难度了。