登录方式
第一种级别(基于口令的安全验证)
只要你知道自己帐号和口令,就可以登录到远程主机。所传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
口令登录过程是这样的:(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服务。
再我的机器上经过证实,不需要上述修改配置文件
)
相关推荐
### 批量实现SSH无密码登录的详细步骤与原理 #### 背景介绍 在大规模部署或维护服务器集群时,实现服务器间的无密码登录变得至关重要。无密码登录不仅可以简化日常管理和运维工作流程,还能提高自动化部署和脚本...
SSH(Secure Shell)是一种网络协议,用于在不安全的网络环境中提供安全的远程登录和其他服务。SSH2是SSH协议的第二版本,它提供了更强的安全性和更多的功能。在这个例子中,我们将探讨如何使用Java实现SSH2的用户名...
SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。在IT领域,SSH常用于管理员对服务器进行安全的控制台访问,执行命令,传输文件等。在这个“SSH简单权限管理”主题中,我们...
1. **配置SSH**:在服务器端,需要配置SSH服务,包括设置SSH监听端口(默认为22)、生成SSH密钥对(公钥和私钥)以实现无密码登录,以及修改`/etc/ssh/sshd_config`配置文件以满足安全需求。 2. **生成SSH密钥对**...
在IT行业中,网络服务的远程访问管理是至关重要的,telnet和SSH(Secure Shell)是两种常见的远程登录协议,用于实现客户端与服务器之间的安全通信。本文将深入探讨这两种协议的工作原理、特点以及如何进行登陆验证...
SSH(Secure Shell)是一种网络协议,用于在不安全的网络环境中提供安全的远程登录和其他服务。SSH2简单登陆程序是一个专为初学者设计的应用,它包含了一个用户界面,使得通过SSH连接到远程服务器变得更加直观和易用...
SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。在IT领域,SSH常用于管理员对服务器进行远程管理,它提供了加密的数据传输,确保了命令行会话、文件传输等操作的安全性。...
这个项目标题提及的是一个结合了MySQL数据库实现简单用户登录功能的SSH整合案例。下面我们将深入探讨SSH框架的核心原理以及在实际应用中的整合步骤。 **Struts框架**: Struts是基于MVC(Model-View-Controller)...
在本项目"基于ssh2的简单登陆注册系统"中,我们将探讨如何利用SSH2协议构建一个安全的用户登录和注册系统。 首先,理解SSH2的基础知识至关重要。SSH2协议通过加密通信数据,包括用户名、密码以及传输的数据,防止被...
**SSH整合概述** SSH(Spring、Struts2和...通过这个示例,开发者可以理解SSH框架集成的基本工作原理,并为自己的项目提供参考。记住,实际开发中还需要考虑更多的细节,如异常处理、安全性优化以及性能优化等。
要实现无密码登录,我们首先需要理解VNC的工作原理: 1. **VNC服务端**:在目标Linux系统上安装并配置VNC服务器软件,如turbo VNC。这包括设置监听端口、启动服务以及创建必要的权限策略。 2. **身份验证机制**:...
下面将详细阐述SSH2框架的组成、工作原理以及如何实现这些功能。 1. Spring框架:Spring作为整个应用的核心,负责管理对象(bean)的生命周期和依赖注入。在登录、注册、登出功能中,Spring可以用来创建并管理控制...
SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。这个"一个简单的ssh demo"是一个示例项目,旨在帮助理解如何在编程中使用SSH2库来实现SSH功能。SSH2是SSH协议的第二版,...
总的来说,这个SSH框架的登录实例是一个学习和实践的好起点,帮助开发者了解SSH框架的基本工作原理和集成方式。随着你对框架理解的加深,你可以逐步添加更多功能,如权限控制、验证码、用户注册等,以构建更复杂的...
SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。在这个简单的注册系统中,SSH可能被用作一个安全的数据传输通道,确保用户注册信息在传输过程中的安全性。 SSH注册系统的...
SSH(Secure Shell)框架是一个广泛使用的安全协议框架,主要用于在不安全的网络环境中提供安全的远程登录和其他服务。在这个简单的SSH框架登录小例子中,我们将探讨SSH的基本概念、其工作原理以及如何在Java应用...
SSH免密码登录的原理是基于密钥的安全验证。首先,客户端A生成一对密钥(公钥和私钥),然后将公钥放在需要访问的服务器B上。当A连接到服务器B时,客户端A会向服务器B发送请求,请求用密钥进行安全验证。服务器B...
SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。它是IT领域中广泛使用的工具,特别是在服务器管理和自动化任务执行方面。SSH简单登录主要涉及以下知识点: 1. SSH原理:...
SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。它是通过加密技术来保护网络通信,防止中间人攻击和数据窃取。本篇文章将详细探讨SSH的基本概念、实现原理以及如何在实际...
这个实例展示了SSH框架如何协同工作,实现一个基础的用户登录系统,包括用户注册、登录、信息修改和显示等功能。 **Struts** 是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,负责处理HTTP请求,并...