ssh简单原理和无密码登录
登录方式
第一种级别(基于口令的安全验证)
只要你知道自己帐号和口令,就可以登录到远程主机。所传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
口令登录过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
第二种级别(基于密匙的安全验证
密匙认证原理简介
密匙认证需要依靠密匙,首先创建一对密匙(包括公匙和私匙,用公匙加密的数据只能用私匙解密,把公匙放到需要远程服务器上,私钥放在客户端。 这样当登录远程服务器时,客户端软件就会向服务器发出认证请求(携带公匙); 服务器收到请求之后,先在服务器的宿主目录下寻找你的公匙,然后检查该公匙是否是合法, 如果合法就用公匙加密一随机数生成所谓的“challenge”发送给客户端软件; 客户端软件收到“challenge”之后就用私匙解密再把结果发送给服务器。 因为用公匙加密的数据只能用私匙解密,服务器经过比较就能知道该客户连接的合法性。
用这种方式,你必须知道自己密匙的口令。 但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
第二种级别不仅加密所传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没你的私人密匙。但是整个登录的过程可能需要10秒。
SSH也支持一些其他的身份认证方法,如Kerberos和安全ID卡等
几个命令
//服务是否安装
[[email protected] 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
//服务状态、启动、停止、重启
[[email protected] init.d]# service sshd
Usage: /etc/init.d/sshd {start|stop|restart|reload|force-reload|condrestart|try-restart|status}
[[email protected] ssh]# service sshd status
openssh-daemon (pid 58999) 正在运行...
ps: sshd 即ssh daemon是服务端程序,而ssh是客户端程序
在/etc/ssh/下sshd_config是服务配置,ssh_config是客户端配置
//设置自启动
[[email protected] ssh]# chkconfig sshd on
chkconfig sshd off关闭自启动
也可以执行“ntsysv”命令启动服务配置程序,在出现的对话框中找到“sshd”服务,然后按“空格”键在其前面加上“*”星号,按“Tab”键选择“确定”按钮保存即可,让系统每次启动时自动运行SSH服务。
公匙登录
生成密匙对
ssh-****** -t dsa -P '' -f ~/.ssh/id_dsa
ssh-******代表生成**; -t 表示指定生成的**类型 ;dsa是dsa**认证的意思,即**类型; -P用于提供密语; -f指定生成的**文件
ssh-****** -t rsa或者ssh-****** -t rsa -P ''
-P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三次回车,用-P就一次回车
centos65机器上,laolv用户下:
[[email protected] .ssh]$ ssh-****** -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 [email protected]
The key's randomart image is:
+--[ DSA 1024]----+
| E .. .+=*oo |
| . . o*+o.o |
| .oo. =. |
| . o.o.. |
| . S .. |
| o |
| o |
| . |
| |
+-----------------+
[[email protected] .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 [email protected] 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
这条命令由多个语句组成,依次分解开来看:
(1)"$ ssh [email protected]",表示登录远程主机;
(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文件后,公钥登录的设置就完成了。
[[email protected] .ssh]$ ssh [email protected] 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa_laolv_centhost2.pub
[email protected]'s password:
[[email protected] .ssh]$
在服务主机
[[email protected] .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
[[email protected] .ssh]$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAn+STDthiIwzaAUbdRJJJfoMoy/6fFjEa6tUSXEocz1QZpoaTHE8MHCnp91LY0n3jnghepoHOCCwACDl14Q3+7RP+Loo5oXDG378kcrkKyvk9ydd3i59NdvkYIAGRPR26/x7EADmynyFZSc4qmroe+lXj5UDtCrhqWgBdIIbtUITEu70RULjm8YsTrBbr5yjIyNiYOa0q238Cj9q8kdtesatsxhAOD8NDS0k/3+T9rlqs5OIYfSEZfTyFF10Xnh17kLI0m49LJvb9xgy4hJlUBLnYtv8PNrhY1p3+Ss1aFeo8oPHEAPVmoQAxgXeiN0d1e+llpNMLAgKz4VZ7JHmaVQ== [email protected]
[[email protected] .ssh]$
[[email protected] .ssh]$ ssh [email protected]
[email protected]'s password:
还是会输入密码
错误排查
看日志,/var/log/secure /var/log/messages(一般是系统的日志,例如你的硬件或者内核有问题,可以查看这个日志;遇到过内存有问题就在这下面有相关日志)通常会告诉你为什么的
[[email protected] 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,可以免密码登录了:
[[email protected] .ssh]$ ssh [email protected] ##第一次,要授权访问私匙
这儿要填的密码是,ssh-******时 -P 设定的密码lzq123
授权,允许服务主机访问客户机的私匙后,再一次登录,不需要输密码了
[[email protected] .ssh]$ ssh [email protected]
Last login: Sun Jan 11 03:37:07 2015 from 192.168.1.146 ###不再输入密码,可登录了 (也不不需要修改服务主机的/etc/ssh/ssh_config文件 及 重启ssh服务)
[[email protected] ~]$
(
如果还是不行,就打开远程主机的/etc/ssh/sshd_config这个文件,检查下面几行前面"#"注释是否取掉。
RSAAuthentication yes ###lzq 能找到RSAAuthentication,没有DSAAuthentication
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
然后,重启远程主机的ssh服务。
再我的机器上经过证实,不需要上述修改配置文件
)