`

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 laolv@192.168.1.145 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa_laolv_centhost2.pub

laolv@192.168.1.145'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 laolv@192.168.1.145

laolv@192.168.1.145'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 laolv@192.168.1.147 ##第一次,要授权访问私匙

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

 

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

[laolv@centhost2 .ssh]$ ssh laolv@192.168.1.147

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服务。

 

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

 

 

 

 

 

 

 

 

 

 

  • 大小: 52.8 KB
分享到:
评论

相关推荐

    批量实现ssh无密码登录

    ### 批量实现SSH无密码登录的详细步骤与原理 #### 背景介绍 在大规模部署或维护服务器集群时,实现服务器间的无密码登录变得至关重要。无密码登录不仅可以简化日常管理和运维工作流程,还能提高自动化部署和脚本...

    SSH2用户名密码验证

    SSH(Secure Shell)是一种网络协议,用于在不安全的网络环境中提供安全的远程登录和其他服务。SSH2是SSH协议的第二版本,它提供了更强的安全性和更多的功能。在这个例子中,我们将探讨如何使用Java实现SSH2的用户名...

    SSH 简单权限管理

    SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。在IT领域,SSH常用于管理员对服务器进行安全的控制台访问,执行命令,传输文件等。在这个“SSH简单权限管理”主题中,我们...

    简单的SSH小实例

    1. **配置SSH**:在服务器端,需要配置SSH服务,包括设置SSH监听端口(默认为22)、生成SSH密钥对(公钥和私钥)以实现无密码登录,以及修改`/etc/ssh/sshd_config`配置文件以满足安全需求。 2. **生成SSH密钥对**...

    telnet和ssh登陆验证

    在IT行业中,网络服务的远程访问管理是至关重要的,telnet和SSH(Secure Shell)是两种常见的远程登录协议,用于实现客户端与服务器之间的安全通信。本文将深入探讨这两种协议的工作原理、特点以及如何进行登陆验证...

    SSH2简单登陆程序

    SSH(Secure Shell)是一种网络协议,用于在不安全的网络环境中提供安全的远程登录和其他服务。SSH2简单登陆程序是一个专为初学者设计的应用,它包含了一个用户界面,使得通过SSH连接到远程服务器变得更加直观和易用...

    ssh2的简单demo

    SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。在IT领域,SSH常用于管理员对服务器进行远程管理,它提供了加密的数据传输,确保了命令行会话、文件传输等操作的安全性。...

    SSH框架整合源码和数据库(结合MySQL实现简单的用户登录)

    这个项目标题提及的是一个结合了MySQL数据库实现简单用户登录功能的SSH整合案例。下面我们将深入探讨SSH框架的核心原理以及在实际应用中的整合步骤。 **Struts框架**: Struts是基于MVC(Model-View-Controller)...

    基于ssh2的简单登陆注册系统

    在本项目"基于ssh2的简单登陆注册系统"中,我们将探讨如何利用SSH2协议构建一个安全的用户登录和注册系统。 首先,理解SSH2的基础知识至关重要。SSH2协议通过加密通信数据,包括用户名、密码以及传输的数据,防止被...

    简单的SSH整合示例——用户登录功能

    **SSH整合概述** SSH(Spring、Struts2和...通过这个示例,开发者可以理解SSH框架集成的基本工作原理,并为自己的项目提供参考。记住,实际开发中还需要考虑更多的细节,如异常处理、安全性优化以及性能优化等。

    linux实现vnc无密码登录

    要实现无密码登录,我们首先需要理解VNC的工作原理: 1. **VNC服务端**:在目标Linux系统上安装并配置VNC服务器软件,如turbo VNC。这包括设置监听端口、启动服务以及创建必要的权限策略。 2. **身份验证机制**:...

    简单ssh2框架程序

    下面将详细阐述SSH2框架的组成、工作原理以及如何实现这些功能。 1. Spring框架:Spring作为整个应用的核心,负责管理对象(bean)的生命周期和依赖注入。在登录、注册、登出功能中,Spring可以用来创建并管理控制...

    一个简单的ssh demo

    SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。这个"一个简单的ssh demo"是一个示例项目,旨在帮助理解如何在编程中使用SSH2库来实现SSH功能。SSH2是SSH协议的第二版,...

    简单MyEclipse搭建SSH框架登录实例

    总的来说,这个SSH框架的登录实例是一个学习和实践的好起点,帮助开发者了解SSH框架的基本工作原理和集成方式。随着你对框架理解的加深,你可以逐步添加更多功能,如权限控制、验证码、用户注册等,以构建更复杂的...

    SSH实现的简单注册

    SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。在这个简单的注册系统中,SSH可能被用作一个安全的数据传输通道,确保用户注册信息在传输过程中的安全性。 SSH注册系统的...

    一个简单的ssh框架登陆小例子

    SSH(Secure Shell)框架是一个广泛使用的安全协议框架,主要用于在不安全的网络环境中提供安全的远程登录和其他服务。在这个简单的SSH框架登录小例子中,我们将探讨SSH的基本概念、其工作原理以及如何在Java应用...

    大数据之SSH免密码登录.docx

    SSH免密码登录的原理是基于密钥的安全验证。首先,客户端A生成一对密钥(公钥和私钥),然后将公钥放在需要访问的服务器B上。当A连接到服务器B时,客户端A会向服务器B发送请求,请求用密钥进行安全验证。服务器B...

    ssh简单登录

    SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。它是IT领域中广泛使用的工具,特别是在服务器管理和自动化任务执行方面。SSH简单登录主要涉及以下知识点: 1. SSH原理:...

    ssh简单实现

    SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。它是通过加密技术来保护网络通信,防止中间人攻击和数据窃取。本篇文章将详细探讨SSH的基本概念、实现原理以及如何在实际...

    SSH架构实例:简单的用户登录,增删改显功能

    这个实例展示了SSH框架如何协同工作,实现一个基础的用户登录系统,包括用户注册、登录、信息修改和显示等功能。 **Struts** 是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,负责处理HTTP请求,并...

Global site tag (gtag.js) - Google Analytics