ssh简单原理和无密码登录

登录方式   

第一种级别(基于口令的安全验证)

只要你知道自己帐号和口令,就可以登录到远程主机。所传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。

 

口令登录过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

 

第二种级别(基于密匙的安全验证

密匙认证原理简介 

  密匙认证需要依靠密匙,首先创建一对密匙(包括公匙和私匙,用公匙加密的数据只能用私匙解密,把公匙放到需要远程服务器上,私钥放在客户端。  这样当登录远程服务器时,客户端软件就会向服务器发出认证请求(携带公匙);  服务器收到请求之后,先在服务器的宿主目录下寻找你的公匙,然后检查该公匙是否是合法,  如果合法就用公匙加密一随机数生成所谓的“challenge”发送给客户端软件;   客户端软件收到“challenge”之后就用私匙解密再把结果发送给服务器。  因为用公匙加密的数据只能用私匙解密,服务器经过比较就能知道该客户连接的合法性。

 

用这种方式,你必须知道自己密匙的口令。 但是,与第一种级别相比,第二种级别不需要在网络上传送口令。

第二种级别不仅加密所传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没你的私人密匙。但是整个登录的过程可能需要10秒。

 

SSH也支持一些其他的身份认证方法,如Kerberos和安全ID卡等

 



 

几个命令

//服务是否安装

[root@centhost2 ssh]# rpm -qa | grep ssh

openssh-clients-5.3p1-94.el6.x86_64

trilead-ssh2-213-6.2.el6.noarch

ksshaskpass-0.5.1-4.1.el6.x86_64

openssh-askpass-5.3p1-94.el6.x86_64

openssh-5.3p1-94.el6.x86_64

libssh2-1.4.2-1.el6.x86_64

openssh-server-5.3p1-94.el6.x86_64

You have new mail in /var/spool/mail/root

//服务状态、启动、停止、重启

[root@centos65 init.d]# service sshd

Usage: /etc/init.d/sshd {start|stop|restart|reload|force-reload|condrestart|try-restart|status}

 [root@centhost2 ssh]# service sshd status

openssh-daemon (pid  58999) 正在运行...

ps: sshd 即ssh daemon是服务端程序,而ssh是客户端程序

在/etc/ssh/下sshd_config是服务配置,ssh_config是客户端配置

//设置自启动

 [root@centhost2 ssh]# chkconfig sshd on

 chkconfig sshd off关闭自启动

也可以执行“ntsysv”命令启动服务配置程序,在出现的对话框中找到“sshd”服务,然后按“空格”键在其前面加上“*”星号,按“Tab”键选择“确定”按钮保存即可,让系统每次启动时自动运行SSH服务。

 公匙登录

生成密匙对 

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

ssh-keygen代表生成密钥; -t 表示指定生成的密钥类型 ;dsa是dsa密钥认证的意思,即密钥类型; -P用于提供密语; -f指定生成的密钥文件

ssh-keygen -t rsa或者ssh-keygen -t rsa -P ''

-P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三次回车,用-P就一次回车

centos65机器上,laolv用户下:

[laolv@centos65 .ssh]$ ssh-keygen -t dsa -P 'lzq123' -f ~/.ssh/id_dsa_laolv_centos65

Generating public/private dsa key pair.

Your identification has been saved in /home/laolv/.ssh/id_dsa_laolv_centos65.

Your public key has been saved in /home/laolv/.ssh/id_dsa_laolv_centos65.pub.

The key fingerprint is:

3a:51:53:ec:17:b4:63:b4:4a:24:1d:83:07:27:2c:20 laolv@centos65

The key's randomart image is:

+--[ DSA 1024]----+

|  E .. .+=*oo    |

|   .  . o*+o.o   |

|       .oo. =.   |

|       . o.o..   |

|      . S ..     |

|       o         |

|      o          |

|       .         |

|                 |

+-----------------+

[laolv@centos65 .ssh]$ ll

总用量 12

-rw-------. 1 laolv laolv 744 1月  11 00:03 id_dsa_laolv_centos65

-rw-r--r--. 1 laolv laolv 604 1月  11 00:03 id_dsa_laolv_centos65.pub

-rw-r--r--. 1 laolv laolv 391 1月   4 03:12 known_hosts

将客户机的公匙追加到服务主机的authorized_keys文件

远程主机将用户的公钥,保存在登录后的用户主目录的 $HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。

$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

这条命令由多个语句组成,依次分解开来看:

(1)"$ ssh user@host",表示登录远程主机;

(2)单引号中的mkdir .ssh && cat >> .ssh/authorized_keys,表示登录后在远程shell上执行的命令:

        (3)"$ mkdir -p .ssh"的作用是,如果用户主目录中的.ssh目录不存在,就创建一个;

        (4)'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub的作用是,将本地的公钥文件~/.ssh/id_rsa.pub,重定向追加到远程文件authorized_keys的末尾。

写入authorized_keys文件后,公钥登录的设置就完成了。

[laolv@centhost2 .ssh]$ ssh [email protected] 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa_laolv_centhost2.pub

[email protected]'s password: 

[laolv@centhost2 .ssh]$

在服务主机

[laolv@centos65 .ssh]$ ll

总用量 16

-rw-rw-r--. 1 laolv laolv 1002 1月  11 00:49 authorized_keys

-rw-------. 1 laolv laolv  744 1月  11 00:03 id_dsa_laolv_centos65

-rw-r--r--. 1 laolv laolv  604 1月  11 00:03 id_dsa_laolv_centos65.pub

-rw-r--r--. 1 laolv laolv  391 1月   4 03:12 known_hosts

[laolv@centos65 .ssh]$ cat authorized_keys 

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAn+STDthiIwzaAUbdRJJJfoMoy/6fFjEa6tUSXEocz1QZpoaTHE8MHCnp91LY0n3jnghepoHOCCwACDl14Q3+7RP+Loo5oXDG378kcrkKyvk9ydd3i59NdvkYIAGRPR26/x7EADmynyFZSc4qmroe+lXj5UDtCrhqWgBdIIbtUITEu70RULjm8YsTrBbr5yjIyNiYOa0q238Cj9q8kdtesatsxhAOD8NDS0k/3+T9rlqs5OIYfSEZfTyFF10Xnh17kLI0m49LJvb9xgy4hJlUBLnYtv8PNrhY1p3+Ss1aFeo8oPHEAPVmoQAxgXeiN0d1e+llpNMLAgKz4VZ7JHmaVQ== laolv@centhost2

[laolv@centos65 .ssh]$

[laolv@centhost2 .ssh]$ ssh [email protected]

[email protected]'s password: 

还是会输入密码

错误排查

看日志,/var/log/secure   /var/log/messages(一般是系统的日志,例如你的硬件或者内核有问题,可以查看这个日志;遇到过内存有问题就在这下面有相关日志)通常会告诉你为什么的

[root@centos65 ssh]# vi /var/log/secure 

an 11 01:13:59 centos65 sshd[12080]: Server listening on 0.0.0.0 port 22.

Jan 11 01:13:59 centos65 sshd[12080]: Server listening on :: port 22.

Jan 11 01:15:09 centos65 sshd[12095]: Authentication refused: bad ownership or modes for file /home/laolv/.ssh/authorized_keys

Jan 11 01:15:09 centos65 sshd[12095]: Authentication refused: bad ownership or modes for file /home/laolv/.ssh/authorized_keys

Jan 11 01:15:09 centos65 sshd[12095]: Authentication refused: bad ownership or modes for file /home/laolv/.ssh/authorized_keys

Jan 11 01:15:09 centos65 sshd[12095]: Authentication refused: bad ownership or modes for file /home/laolv/.ssh/authorized_keys

问题似乎很明显了,authorized_keys的权限问题,搜索了一下,发现此文件权限必须为600,这个测试用户是本人新建的,文件的权限不正确,于是修改之:

$ chmod 600 ~/.ssh/authorized_keys

.ssh目录的权限必须为700

$ chmod 700 ~/.ssh/

经过修改$ chmod 600 ~/.ssh/authorized_keys,可以免密码登录了:

[laolv@centhost2 .ssh]$ ssh [email protected] ##第一次,要授权访问私匙

这儿要填的密码是,ssh-keygen时 -P 设定的密码lzq123

授权,允许服务主机访问客户机的私匙后,再一次登录,不需要输密码了

[laolv@centhost2 .ssh]$ ssh [email protected]

Last login: Sun Jan 11 03:37:07 2015 from 192.168.1.146  ###不再输入密码,可登录了  (也不不需要修改服务主机的/etc/ssh/ssh_config文件 及 重启ssh服务)

[laolv@centhost3 ~]$ 

如果还是不行,就打开远程主机的/etc/ssh/sshd_config这个文件,检查下面几行前面"#"注释是否取掉。

  RSAAuthentication yes ###lzq 能找到RSAAuthentication,没有DSAAuthentication

  PubkeyAuthentication yes

  AuthorizedKeysFile .ssh/authorized_keys

然后,重启远程主机的ssh服务。

再我的机器上经过证实,不需要上述修改配置文件

 

 

 

猜你喜欢

转载自forrest-lv.iteye.com/blog/2174723
今日推荐