说明:下文中说的

'客户端'指的是你所使用的本地机器;

'服务端'指的是远程你要连接的机器;

----------------------------------------------------------

1.首先在客户端打开shell窗口,输入能生成'公钥,私钥对'的命令:

ssh-keygen -t rsa -P ''          #注意参数-P中的P是大写的

#-P后面的单引号对与大写P之前有空格

2.稍等会让你输入生成的文件保存在哪,默认的位置是家目录,一般直接回车即可

#在没改变存储位置的情况下,会在家目录生成一个隐藏的.ssh文件夹,并且在.ssh文件夹里又生成了一个公钥文件:id_rsa.pub,和一个私钥文件:id_rsa

#.ssh为隐藏文件,直接ls显示不出来,要用ls -a才能显示出来,看不看得见都不影响cd .ssh命令

3.利用scp或其它方式将.ssh文件夹中的公钥复制到服务器端(我是用scp复制的)

scp /home/pi/.ssh/id_rsa.pub yang@138.128.204.165:/home/yang/

#因为是利用scp方式传输的,所以会提示你输密码,如果已实现ssh的免密码登录了,再用scp的时候就不用再输密码了

#其实scp传输的时候也有几个坑,如果没系统的看过scp文档的话,简单说一下:1.其实我传文件的时候用的不是上面写的那条命令,而是scp -P 10022 /home/pi/.ssh/id_rsa.pub yang@138.128.204.165:/home/yang/,可以看到多了个'-P 10022',是因为我的ssh服务端设置的ssh连接端口号是10022,其实平时咱们看到的没有加端口的命令实际上是有一个隐式的-P 22在里面呢(22是ssh安装时默认的端口),就相当于你写了'scp 本地/远程 远程/本地后',scp还会处理一下,变成'scp -P 22 本地/远程 远程/本地'再发送到远端的服务器

4.在远程服务器的家目录下创建.ssh文件夹,然后将家目录的刚刚从本地传过去的id_rsa.pub复制到.ssh文件夹下,并且改名为authorized_keys

#我是在远程服务器上也执行了1中的命令系统给生成的,不过这样比直接用mkdir创建麻烦,当时就是考虑是不是自己创建不行,是不是在远程服务器的.ssh也是要用1中的命令创建的呢,保险起见那么办的

#!网上的教程不是先将id_rsa.pub复制到.ssh后改名为authorized_keys,而是在家目录就直接用cat id_rsa.pub >>.ssh/authorized_keys,我想应该是如果有多台机器都想免密码连接到这台远程服务器,可以将多台本地客户机生成的id_rsa.pub都追加到一个文件里面(我也只是猜测,有时间实践一下)

5.将authorized_keys的权限设置为600

#chmod 600 authorized_keys 我这里直接写的authorized_keys是因为当前路径就是在.ssh文件夹下,如果当前位置不是.ssh文件夹authorized_keys必须用绝对路径

#之后再连就能连上了,关于连接这里也有一点是需要注意的,平时大家都是写的'ssh 远程服务器ip'这种方式连的,但有些人这么连但连接不上,为什么呢?是因为用这种方式连的人是因为远程服务器上有和你正在登录的用户同名的用户,并且远程服务器上ssh默认的端口是22,才能用那种直接连的方式,否则,如果远程服务器上的ssh连接密码变了,你在连的时候就要加上'-P 端口号',如果远程服务器上的用户名没有和你在本地正在登录的这个用户重名的,你还需要指定'-l 用户名'才可以,所以我连接我的远程服务器是这样的'ssh -l yang -P 10022 aaa.bbb.ccc.ddd'.话又说回来了,就算是用'ssh ip地址'连接的,正如前面说的,在本机次命令发给远程服务器之前它还是加工了一下,将默认的用户名和密码参数加上了,即你写的是 ssh www.xxx.yyy.zzz,但发送之前ssh又处理了一下,ssh -l 本地当前登录的用户名 -P 22 www.xxx.yyy.zzz'然后将处理后的这条命令发到远程服务器进行登录操作;免密码登录是在前面说的基础上再参考http://os.51cto.com/art/201209/358478.htm

设置好免密码登录后还连接不上的可能原因与解决办法?

1.免密码登录设置以后用A用户可以连上去,但是用B用户就连不上了?

::记住最重要的一点,你要想用B免密码登录,则1.在/home/B/下必须有.ssh文件夹,2.并且.ssh文件夹里有一个authorized_keys文件(该文件其实就是将客户端的id_rsa.pub改了个名),3.且该文件的权限为600.这可能就能解释用A能连上用B连不上的问题了,就是因为A用户的家目录下有一个名叫.ssh的目标,一般该目录的权限为700;并且.ssh目录下有一个名为authorized_keys的文件,该文件权限为600(这里面还有一个坑!!!就是如果.ssh目录是自建的一定要看一下文件夹权限是不是700,最重要的是如果.ssh文件夹里的authorized是从其它目录里面复制过来的,千万千万要看看该文件的属主和属组,如果你你从A家目录下的.ssh文件夹里复制过来的,千万要看一下如果复制过来后authorized的属主和属组还是A的要用chown给改成B的,否则因为它的权限为600,只有属主可以读写,而当ssh无密码连接的时候又需要读取该文件和客户端的比较,因为B没有权限所以就无法进行读取操作,更别说比较了,故会登录失败(上面有一个关于免密码登录的原理链接,可以点进去看看,其中就说了,无密码登录会读取.ssh里的authorized_keys文件,如果你使用的用户对该文件没有读权限,结果肯定是失败的))

追加1:免密码登录的时候,因为我们是将客户端生成的公钥放在了某一个用户的主目录下的.ssh文件夹里并重命名为authorized_keys,这里强调的是'一个',比如说我在/home/yang/.ssh/个路径下我将客户端传过来的id_rsa.pub改名为authorized_keys,并设置文件权限为600,重启服务后,我在客户端连的时候只有两种情况可以连上,假设我的ssh连接端口改成了10022,第一种:客户端本地用户是yang,则可以用'ssh -P 10022 xxx.xxx.xxx.xxx'去连.还有一种情况就是客户端本地用户不是yang则用'ssh -l yang -P 10022 xxx.xxx.xxx.xxx'去连;所以这个免密码登录其实是对远程机器上的某一个或某几个用户而言的,而不是说你只要启动了免密码登录了,随便指定一个远程机器上有的用户就可以了,必须是你的公钥传到了哪个用户的家目录下的.ssh里(当然已改名为authorized.keys)你才可以用哪个用户去免密码登录,否则都要输入密码

ssh免密钥登录的更多相关文章

  1. linux系统ssh免密钥登录配置

    linux主机配置ssh免密钥登录,具体配置如下: 1.执行命令ssh-keygen -t rsa,生成公钥和私钥(具体步骤详见下图) 2.会在当前用户的家目录的.ssh/生成公钥和私钥, 3.执行s ...

  2. Linux机器之间SSH免密钥登录设置

    SSH免密钥登录 私钥:密钥留在本机 公钥:密钥发给其他机 hadoop01 生成密钥: ssh-keygen -t rsa (密钥存放路径:/root/.ssh) id_rsa:私钥 id_rsa. ...

  3. [CentOS] SSH 免密钥登录

    一.环境说明: 操作系统:CentOS-7-x86_64-Minimal-1611 虚拟机:VMware® Workstation 12 Pro:12.5.5 build-5234757 服务器:no ...

  4. 014-配置SSH免密钥登录

    问题:client端需要免密钥登录服务器server如何配置?1.前提:客户端已安装openssh-client;服务端已安装openssh-server;服务器端22号端口已经打开2.需要密钥登录时 ...

  5. ssh免密钥登录一例问题

    今天遇到一个奇怪的问题,在同一机器上创建的普通用户使用 ssh-copy-id -i .ssh/id_rsa.pub root@192.168.3.254 建立与root用户的免密钥通信,结果死活还是 ...

  6. linux配置ssh免密钥登录

    https://blog.csdn.net/xiaoyi23000/article/details/80597516 1.执行命令ssh-keygen -t rsa,生成公钥和私钥 2.会在当前用户的 ...

  7. Xshell配置ssh免密码登录-密钥公钥(Public key)与私钥(Private Key)登录【已成功实例】

    本文转自https://blog.csdn.net/qjc_501165091/article/details/51278696 ssh登录提供两种认证方式:口令(密码)认证方式和密钥认证方式.其中口 ...

  8. ssh免密码登录之分发密钥

    ssh免密码登录之分发密钥 1.ssh免密码登录 密码登录和密钥登录有什么不同? 密码登录(口令登录),每次登录都需要发送密码(ssh) 密钥登录,分为公钥和私钥,公钥相当于锁,私钥相当于钥匙 1.1 ...

  9. ssh 免密码登录 与 密钥公钥原理讲解

    前言 由于最近频繁需要登录几个服务器,每次登录都需要输入密码,故相对麻烦. 由于个人服务器用于实验,故对安全性要求不是很高,故想实现ssh免密登录. 通过阅读ssh 公钥私钥认证操作及原理以及ssh公 ...

随机推荐

  1. mac 版本号控制工具SmartSVN7.5.4(破解版)

    SmartSVN7.5.4和破解工具,下载地址:http://download.csdn.net/detail/pearlhuzhu/7407319 操作步骤: 1.在MAC上选中smartsvn-m ...

  2. CouchDB简单应用

    CouchDB是众多称作NoSQL解决方案中的一员.与众不同的是,CouchDB是一个面向文档的数据库,在它里面所有文档域(Field)都是以键值对的形式存储的.域(Field)可以是一个简单的键值对 ...

  3. 存储过程获取新插入记录ID

    create procedure sp_AddUser1@Name nvarchar(200), @Remark nvarchar(200),@Flag int as begin declare @i ...

  4. 无法连接远程mysql问题

    按照别人的博客操作之后,重启了服务: 前几天,windows上的mysql无法远程连接,在网上搜了一下,都是一个说法,神马改表.加权限.刷新等等,尝试之后都没有用,后来同事告诉了我一个方法,就解决了那 ...

  5. HDU 5573 Binary Tree(找规律)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5573 题意:给你一个完全二叉树,节点为自然数的排列(第一行1,第二行2 3,第三行4 5 6 7... ...

  6. [C#参考]细说进程、应用程序域与上下文之间的关系

    原文转载链接:http://www.cnblogs.com/leslies2/archive/2012/03/06/2379235.html Written by:风尘浪子 引言 本文主要是介绍进程( ...

  7. 移动前端制作篇之javascript篇

    javascript(简称js)语言在移动前端应用很广.可以说必不可少,许多效果都是和js相关的.包括现在移动端的一些框架.jqmobi.jqtouch.sencha touch.jquerymobi ...

  8. hdu 3032 Nim or not Nim? 打sg表

    题目链接 给出n堆石子, 每次可以取一堆中的任意x个(x>=1), 或者将一堆石子拆成两堆, 取到最后一堆的胜. 这个题需要打sg表找规律, 打表程序看代码. #include<bits/ ...

  9. C语言2

    函数是C语言的基本单位,类是java,c#,c++的基本单位 int abs(int x); double fabs(double x);   按变量的存储方式:静态变量.自动变量.寄存器变量 指针就 ...

  10. 用while判断输入的数字是否回文数

    /* Name:用while判断输入的数字是否回文数 Copyright: By.不懂网络 Author: Yangbin Date:2014年2月18日 04:29:07 Description:用 ...