说明:下文中说的

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

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

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

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. getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()的作用

    getCacheDir()方法用于获取/data/data/<application package>/cache目录 getFilesDir()方法用于获取/data/data/< ...

  2. package.json配置项

    以下示例列举了常用的地方,一些不常用的可以查看文档:文档地址 { //该模块名字 "name":"test" , //版本 "version" ...

  3. JavaScript引用类型之Array数组的concat()和push()方法的区别

    在javascript中,我们一般都只用push向数组的尾部插入新元素的,但是其实在javascript中还有另外一个方法和push一样,也是向数组尾部插入新元素的,但是他们之间却存在着一定的区别,当 ...

  4. css3 动画(animation)-简单入门

    css3之动画(animation) css3中我们可以使用动画,由于取代以前的gif图片,flash动画,以及部分javascript代码(相信有很多同学都用过jquery中的animate方法来做 ...

  5. c# 第三方控件 闪退

    使用了第三方控件之后 出现了闪退的情况!  该第三方控件的软件没有注册或没有安装改第三方控件的软件

  6. hdu4741

    2013年两场网络赛已经过了,之前的现场赛拿了多次铜牌,而这两场网络赛我们都表现得这么水,不由得感慨起来,ACM竞赛生涯就要画上句号了,甚至整个学习生涯中这种纯学术的竞赛都要完了.这两场网络表现得不好 ...

  7. ImageView 各种工具类

    package imageUtil; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOut ...

  8. 静态资源库CDN服务

    使用静态资源库可以访问线上资源文件,比如jquery库.bootstrap库.使用百度静态资源库的居多,但是发现百度暂时不支持https协议,bootcdn是一个不错的选择. 百度静态资源公共库 优点 ...

  9. Qt qss一些伪装态,以及margin与padding区别

    伪状态    描述 :checked    button部件被选中:disabled    部件被禁用:enabled    部件被启用:focus    部件获得焦点:hover    鼠标位于部件 ...

  10. 编程实现Windows系统自动登录

    编程实现Windows系统自动登录 原理: 通过注册表修改实现.Windows内置了自动登录的机制,在登录系统时,winlogon会检查注册表下有没有设置自动登录,如果设置了就上就会读取用户名和密码, ...