当前位置:首页 > 技术 > 正文内容

Fedora 17/18 之 SSH基本配置及无密码(密钥验证)登录配置

不羁月人2013-01-23技术866

前言

最近因为毕设需要搭建Hadoop,理所当然的要用到SSH无密码登录了,其实就是用公私钥认证的方式进行登录。 不久前曾在Fedora17上测试成功,结果因为一些细节上的问题,昨天在Fedora18的时候配了大半天都没成功,还以为是新版本Fedora的问题=。= 多方查阅资料后,直到凌晨才配置成功…这里就整理一篇综合的SSH配置文章,巩固一下记忆。 

P.S.1.本文为单机本地访问,多机远程访问操作类似。 

P.S.2.本文在Fedora17和18下测试成功。

SSH基本配置

首先安装openssh-server和openssh-clients,执行如下命令:

sudo yum install openssh-server openssh-clients

然后配置SSH服务器配置文件sshd_config,执行如下命令: 

sudo vi /etc/ssh/sshd_config 

将下面各行前的注释符#(如果有的话)去掉:

Port 22 Protocol 2 RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
  • Port 22为SSH端口 

  • Protocol 2为使用协议2 

  • RSAAuthentication yes为使用RSA验证 

  • PubkeyAuthentication yes为使用公钥验证 

  • AuthorizedKeysFile .ssh/authorized_keys为指定验证公钥文件所在的路径  

昨天就是最后三行没去掉注释才导致无法公钥验证,只能用密码登录… 还有一些常用的选项,下面简单介绍一下: PermitRootLogin #是否允许root用户登录,为了安全,一般都设置为no 

  • MaxAuthTries #最大验证尝试次数,默认为6,为防止暴力破解,一般设置更小的值 

  • MaxSessions #最大连接数,就是允许连接的客户端数量,这个视情况而定了 

  • PermitEmptyPasswords #是否允许使用空密码,为了安全一般设置no,不过既然用密钥验证的话,这个意义就不太大了吧 

接下来启动SSH,执行如下命令:

sudo systemctl restart sshd.service 或 sudo service sshd restart

服务器配置完毕,到客户端配置。如果只是单机本地访问的话不配置也能正常访问。 

修改客户端配置文件ssh_config(注意,是ssh_config而不是sshd_config,前者是客户端配置文件,后者是服务端的配置文件),执行如下命令: 

sudo vi /etc/ssh/ssh_config 

将下面各行前的注释符#去掉(如果有的话):

Port 22 Protocol 2,1

这样就可以了。 

在SSH访问测试之前,还要对防火墙进行设置,允许SSH端口被访问。这里有两种方法: 

方法一.执行如下命令:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

方法二.执行如下命令:

sudo vi /etc/sysconfig/iptables

在文件内追加:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

然后测试SSH访问,执行如下命令(ssh后的是目标主机地址,这里是本地测试所以用localhost):

ssh localhost

首次连接会提示站点未知,问你是否要继续连接,这里键入yes。接着会提示输入密码,输入用户密码(输入的密码不会显示)后回车,出现类似下面的信息的话即登录成功:

Last login: Wed Jan 23 15:52:55 2013

至此,SSH基本配置完毕。

SSH密钥验证无密码登录配置

上面的配置在每次访问时都要键入密码,很不方便。只要通过使用密钥验证的方式,就可以避免输入密码的繁琐性。 至于验证原理这里就不赘述了,自行去充电吧。简单举个例子:A想通过SSH访问B,即A是客户端,B是服务器,那么就需要A生成密钥对,然后将公钥提供给B,在每次登录验证的时候,B会使用A的公钥随机生成一个加密的密码发给A,A用自己的私钥解密后将解密的密码回发给B,B验证通过后A就登录成功了。  

所以首先是客户端生成密钥对,键入如下命令:

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

面的dsa可用rsa替代,两者是不同的加密方式。生成的密钥对将存放在home目录的.ssh隐藏目录下,id_dsa.pub是公钥,id_dsa是私钥。 

 然后将公钥发给服务器并追加到authorized_keys文件中,执行如下命令:

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

由于这里是本地测试,所以authorized_keys文件路径不变,如果是远程访问的话,可以使用scp命令进行公钥传送,scp使用方法清自行查找资料。  

最后有一点很重要,就是authorized_keys文件的权限,由于RSA对文件权限十分敏感,所以必须对文件进行权限设置。执行如下命令:

chmod 600 ~/.ssh/authorized_keys

权限可以是600或者644,如果漏了这点的话就无法使用密钥验证了。 测试无密码登录,执行如下命令:

ssh localhost

这时就不会提示输入密码,直接登录成功了。 以上配置完毕。

结语

配这个SSH真心花了太多时间,但因此也学到了不少东西。在配置的时候主要注意几点:服务端配置文件的配置、防火墙配置、authorized_keys文件权限设置。

一句总结,果真细节决定成败。 

下面是一篇对我很有用的文章里的一部分——SSH调试步骤,转过来备忘,感谢原作者。 

 以下内容转自:忘了  

 用ssh -v 显示详细的登陆信息查找原因: 

 $ ssh -v localhost 

 回车显示了详细的登陆信息如下:

 。。。。。。省略 

debug1: Authentications that can continue: publickey,gssapi-with-mic,password 

debug1: Next authentication method: gssapi-with-mic 

debug1: Unspecified GSS failure. Minor code may provide more information Unknown code krb5 195 

debug1: Unspecified GSS failure. Minor code may provide more information Unknown code krb5 195 

debug1: Unspecified GSS failure. Minor code may provide more information Unknown code krb5 195 

debug1: Next authentication method: publickey 

debug1: Trying private key: /home/huaxia/.ssh/identity 

debug1: Trying private key: /home/huaxia/.ssh/id_rsa 

debug1: Offering public key: /home/huaxia/.ssh/id_dsa 

debug1: Authentications that can continue: publickey,gssapi-with-mic,password 

debug1: Next authentication method: password huaxia@localhost's password: 

同时用root用户登陆查看系统的日志文件: 

$tail /var/log/secure -n 20 

 。。。。。。省略 

Jul 13 11:21:05 shnap sshd[3955]: Accepted password for huaxia from 192.168.8.253 port 51837 ssh2 

Jul 13 11:21:05 shnap sshd[3955]: pam_unix(sshd:session): session opened for user huaxia by (uid=0) 

Jul 13 11:21:47 shnap sshd[4024]: Connection closed by 127.0.0.1

Jul 13 11:25:28 shnap sshd[4150]: Authentication refused: bad ownership or modes for file /home/huaxia/.ssh/authorized_keys Jul 13 11:25:28 shnap sshd[4150]: Authentication refused: bad ownership or modes for file /home/huaxia/.ssh/authorized_keys

Jul 13 11:26:30 shnap sshd[4151]: Connection closed by 127.0.0.1 

。。。。。。省略 

从上面的日志信息中可知文件/home/huaxia/.ssh/authorized_keys 的权限有问题。 查看/home/huaxia/.ssh/ 下文件的详细信息如下: 

 $ ls -lh ~/.ssh/ 

总计 16K 
-rw-rw-r-- 1 huaxia huaxia 602 07-13 11:22 authorized_keys 
-rw------- 1 huaxia huaxia 672 07-13 11:22 id_dsa 
-rw-r--r-- 1 huaxia huaxia 602 07-13 11:22 id_dsa.pub 
-rw-r--r-- 1 huaxia huaxia 391 07-13 11:21 known_hosts

修改文件authorized_keys的权限(权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能 ):

 $ chmod 600 ~/.ssh/authorized_keys 

 再次测试登陆如下: 

 $ ssh localhost 

Last login: Wed Jul 13 14:04:06 2011 from 192.168.8.253


看到这样的信息表示已经成功实现了本机的无密码登陆。 

8.认证登陆远程服务器(远程服务器OpenSSH的服务当然要启动)  

拷贝本地生产的key到远程服务器端(两种方法) 

方法一: 

$cat ~/.ssh/id_rsa.pub | ssh 远程用户名@远程服务器ip 'cat - >> ~/.ssh/authorized_keys'  

方法二: 

在本机上执行: 

$ scp ~/.ssh/id_dsa.pub [email protected]:/home/michael/ 

登陆远程服务器[email protected] 后执行: 

 $ cat id_dsa.pub >> ~/.ssh/authorized_keys 

本机远程登陆192.168.8.148的测试: 

$ssh [email protected] 

Linux michael-VirtualBox 2.6.35-22-generic #33-Ubuntu SMP Sun Sep 19 20:34:50 UTC 2010 i686 GNU/Linux Ubuntu 10.10 Welcome to Ubuntu! * Documentation: https://help.ubuntu.com/ 216 packages can be updated. 71 updates are security updates. New release 'natty' available. Run 'do-release-upgrade' to upgrade to it.  

Last login: Wed Jul 13 14:46:37 2011 from michael-virtualbox michael@michael-VirtualBox:~$ 

可见已经成功登陆。 如果登陆测试不成功,需要修改远程服务器192.168.8.148上的文件authorized_keys的权限(权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能 ) 

 chmod 600 ~/.ssh/authorized_keys

扫描二维码推送至手机访问。

版权声明:本文由不羁月人(Moonman.cool)发布,如需转载请注明出处。

本文链接:https://www.moonman.cool/post/3.html

分享给朋友:

相关文章

JAVA解惑之奇数性

有一段时间没写过东西了,由于各种状况。今晚就抽些时间来更新一篇。 如题所示,这次要讨论的是JAVA中关于判断一个数(这里以int为例)是否为奇数的问题。  首先看以下的代码: boolean isO...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。