当前位置:首页 » 云服务器 » 如何实现服务器之间的免密登录

如何实现服务器之间的免密登录

发布时间: 2023-05-26 01:55:37

⑴ ssh免密码登陆及其原理

[TOC]

ssh 无密码登录要使用公钥与私钥。linux下可以用用ssh-keygen生成公钥/私钥对,下面以CentOS为例。有机器A(192.168.64.21),B(192.168.64.22)。
目标:A通过ssh免密码登录到B

特意强调,使用参数可以省去生成公钥/私钥的回车步骤昌纯

备注:

第一次登录需输入yes,现在A机可以无密码登录B机了,B登陆A,也同样,在B中生成公钥和私钥对,将公钥写入authorized_keys中,然后同步A、B中的authorized_keys,使其一致就ok了。

也即就是:登录的机子有私钥,被登录的机子要有登录机子的公钥,这个公钥/私钥对一般在私钥宿主机产生。上面是用rsa算法(不对称加密算法)的公钥/私钥对,当然也可以用dsa(对称加密算法:对应的文件是id_dsa,id_dsa.pub)

SSH是为建立在应用层和传输层基础上的安全协议( OSI七层与TCP/IP五层网络架构详解 )。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH 协议可以有效防止远程管世迅知理过程中的信息泄露问题。

从客户端来看,SSH提供两种级别的安全验证:

只要知道帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但缺点是:不能保证你正在连接的服务器就是你想连接的服务器。以下是登录验证流程:

​ 当第一次链接远程主机时,会提示你当前主机的”公钥指纹”,询问你是否继续,如果选择继续后就可以输入密码进行登录了,当远程的主机接受以后,该台服务器的公钥就会保存到~/.ssh/known_hosts文件中。

这种验证的前提是客户端需要生成一对密钥,将公钥放到需访问的远程服务器。这种验证比上一种的好处是,不能仿冒真正的服务器,因为要仿冒必须拿到客户端生成的公钥。缺点就是验证等待过程稍长些。

1、在客户端打开终端,执行 ssh-keygen ,该命令会默认在 ~/.ssh/ 目录下创建 id_rsa 、 id_rsa.pub 两个文件,分别为你的公钥和私钥

2、将公钥 id_rsa.pub 文件拷贝到服务器端的 ~/.ssh/authorized_keys 文件中,可通过scp拷贝

A要免密码登录到B,B首先要拥有A的公钥,然后B要做一次加搜消密验证。非对称加密,公钥加密的密文不能公钥解开,只能私钥解开

ssh-agent

ssh-agent是密钥管理器,是一种控制用来保存公钥身份验证所使用的私钥的程序

运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程

ssh-agent是管理多个ssh key的代理,受管理的私钥通过ssh-add来添加
好处1:不用重复输入密码
用 ssh-add 添加私钥时,如果私钥有密码的话,照例会被要求输入一次密码,在这之后ssh-agent可直接使用该私钥,无需再次密码认证。

好处2:不用到处部署私钥
假设私钥分别可以登录同一内网的主机 A 和主机 B,出于一些原因,不能直接登录 B。可以通过在 A 上部署私钥或者设置 Forwarding(转发) 登录 B,也可以转发认证代理连接在 A 上面使用ssh-agent私钥登录 B;可以在A上直接sftp传文件到B上。

如这边有一台机器是local,能通过公钥直接登陆server1和server2。server1和server2之间无公钥登陆。

现在要在server1上直接登陆server2,在local上执行

执行了之后就将私钥给ssh-agent保管了,server1上面登陆server2的时候,需要私钥验证的时候直接找ssh-agent要就可以了
接下来登陆server1,注意-A

可以发现server1上多了/tmp/ssh-xxxxxxxxx/agent.xxxxx的socket,之后神奇的事发生了,在 server1上可直接进server2,只需执行如下命令,如果加了-A则可以继续ssh forwarding(转发) ,以至无限的机器forwarding。
ssh (-A) server2
同样的原理可以试一下sftp, scp等基于ssh的命令。

如运行ssh-add,遇到 Could not open a connection to your authentication agent.。

解决: 需要ssh-agent启动bash,或者说把bash挂到ssh-agent下面。

1 ssh免密码登陆及其原理

⑵ windows Openssh-server(服务端-免密登陆设置)

windows10(其它版本请自行网络)
一、win10 安装spenssh

1、服务端切换到C:ProgramDatassh下(首次启动sshd后会生成该文件夹),打开sshd_config文件
2、修改 sshd_config 配置文件参数

3、重启ssh-server服务

三、服务端设置完成, 设置做哪客户端链接
1、客户端生成ssh密瞎胡正钥文件:

注: -d 4096 是设置加密位数(可不要磨悔); -t 任意字符 必须设置

2、需要将客户端(celient)生成的 id_rsa.pub 文件密钥, 追加 到服务端的 authorized_keys 文件中,[authorized_keys 文件路径: windows系统在 C:UsersAdministrator.ssh 目录下,没有可新建]

四、测试ssh免密链接, 首次需要输入密码

⑶ ssh PublicKey免密登录服务器

建立PublicKey登陆步骤其实非常简单,总结来说就是将客户端生成的的ssh public key添加到服务器的 ~/.ssh/authorized_keys 文件中,即可实现ssh的免密码登录。

在客户端生成公钥密钥 附一篇 ssh-keygen 基本用法

然后一路回车, 使用默认值即可

使用 ls 命令可以看到当前目录下的文件,有了个 id_rsa 和 id_rsa.pub ,前者是密钥,后者是公钥。

查看公钥

复制公钥

先尝试进入 .ssh 看看目录是否存在

若不存在则新建一个

然后修改权限

接着再进入.ssh,然后修改将公钥添加到authorized_keys

按 i ,然后将刚刚复制的密钥粘贴到这里,按 esc ,再按 : ,输入 wq 保存并退出
接着修改权限

做好配置之后,通过ssh可以直接登录了。

我们可以利用ssh的配置文件来简化我们登陆的操作
配置文件在 ~/.ssh/config
我们可以修改这个文件(如果不存在则新建一个)

YourName可以改成任意名字
如果修改了端口则需要加上 Port 参数
还有各种各样的参数可以查看帮助

配置完后可以这样登陆服务器

Enjoy it~

⑷ ssh 双机互信:免密码登录设置步骤及常见问题

在 linux 系统管理中,设置免密码登录,进行机器的批量管理是最常用的一个方法。比如针对几十甚至上百台线上机器,通常我们会设置一台“发布机”作为中央控制机对其它线上机器免密码登录,然后进行软件、配置文件的分发、更新、部署。当然了,针对上面的问题,解决方案并非最优且唯一,比如你也可以用 expect 模拟自动输入来完成自动登录验证这一过程,或者用现在一些开源的软件自动化配置和部署工具,比如 Puppet,但这都不在本文的讨论范畴,今天咱们要说的就是这种最原始、最有效、最直接的方式:免密码登录。

(1)问题:

假设:现有2台机器

1、个人机192.168.1.110

2、服务器192.168.1.112

要使110无需密码通过ssh登入112
(2)步骤

1、创建密钥

2、复制公密到服务器

3、添加公密到192.168.112的信任区域

注: 2,3两步可由命令ssh--id一步到位

4、测试

此时整个步骤已经完成,你可以尝试 ssh ip 或者 /etc/hosts 中的主机名试试。

(3)可能遇到的问题

1、在使用 ssh--id 错误提示

表现:
公钥,私钥已经生成,执行上述命令完毕出现如下错误:

$ ssh--id remote-machine

/usr/bin/ssh--id: ERROR: No identities found

解决方法:

g 之发现缺少公钥路径,通过 -i 加上即可:

2、ssh ip 可以成功登录,ssh hostname 却失败

表现:

ssh hostname

ssh: connect to host localhost port 22: Connection refused

解决方法:

看下对方的主机名是不是在 /etc/hosts 文件中和 ip 做了映射,没有就加上即可。

3、ssh 的配置目录权限问题

由于 ssh 的权限直接关系到服务器的安全问题,因此 ssh 每次读取配置都会校验相关文件夹和文件的权限,以防止权限过大对外暴露。

表现:
设置了.ssh目录,在authorized_keys设置了key后登录还提示需要输入密码。

解决方法:

注意权限,.ssh权限700,authorized_keys权限600,就KO啦!

chmod 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys

4、ssh localhost:publickey 授权失败

注:ssh可同时支持publickey和password两种授权方式,publickey默认不开启,需要配置为yes。
如果客户端不存在.ssh/id_rsa,则使用password授权;存在则使用publickey授权;
如果publickey授权失败,依然会继续使用password授权。
不要设置 PasswordAuthentication no ,它的意思是禁止密码登录,这样就只能本机登录了!
5、ssh localhost:Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

最后重启你的 linux 执行 ssh localhost
6、ssh localhost:需要密码

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

7、ssh ip 或 hostname 均提示:connection refused

目标主机的ssh server端程序是否安装、服务是否启动,是否在侦听22端口;
是否允许该用户登录;
本机是否设置了iptables规则,禁止了ssh的连入/连出;
具体请参考: http://hi..com/leejun_2005/item/bfc0ded296cb8ebf32db907e
(4)最后的问题

本文介绍的建立基于免密码登录,双机互信的管理方式简单、直接,但是安全就是个问题了,稍有不慎容易被一锅端,建议加上防火墙的端口、ip 策略,有条件的话试试动态口令,这样会更稳妥些。再有就是当机器规模达到上百、上千台的时候,如果对文件数据、机器状态的实时同步、一致性的要求很高的时候,这种管理方式的弊端就出来了。

(5)Refer:

http://blogread.cn/it/article/6103?f=wb ssh--id帮你建立信任

http://www.lvtao.net/server/54.html ssh无密码登入设置 ssh-keygen ssh--id

http://hi..com/leejun_2005/item/bfc0ded296cb8ebf32db907e SSH的安装及登录提示:connection refused的解决办法

http://www.cnblogs.com/qcly/archive/2013/07/27/3219535.html 一次由SELinux引起的ssh公钥认证失败问题

⑸ 如何实现安全的免密码ssh登录

创建ssh公私钥

首先你需要放弃使用的密码登录的方式,因为那种方式实在太让人崩溃了. 下面我们开始使用一种被称为“公私钥“认证的方式来进行ssh登录. “公私钥“认证方式简单的解释是

你需要创建一对公私钥
然后把公钥放到服务器上, 自己保留好私钥
当ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了

我们现在来点实际的, 我们有两台机器: qian.jianingy.com(这是我们的服务器, 实际上它是我的), nby.jianingy.com(这是我的笔记本). 首先,使用ssh-keygen程序在笔记本上创建公私钥对

生成公私钥
jianingy@nby:~$ ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/home/jianingy/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
15:c6:44:59:bf:6f:7a:11:eb:cb:02:d4:aa:33:e0:ae jianingy@nby

ssh-keygen程序会寻问你把公私钥文件存放在哪里.根据传统我们会把它放在~/.ssh里面.如果你不想
追随这个传统, 你可能给花些时间游说那些ssh程序.至于公私钥的名字, 用默认的id_rsa吧,道理是一样的.
接下来输入一个口令,用来保护这个私钥. 我强烈建议你输入这个口令而不是让它为空(稍后我会解释的). 现在公私钥生成好了,
私钥(identification)被保存成了id_rsa, 公钥(public key)被保存成id_rsa.pub. 注意:
一定要保护好你的私钥,他就像你家里存家底的保险柜的钥匙一样重要.
现在把doggy.pub拷贝到服务器上去, 并且将其内孙帆容追加到一个叫~/.ssh/authorized_keys的文件里去
jianingy@nby:~$ cat /home/jianingy/.ssh/doggy.pub | ssh 192.168.1.9 "cat - >> ~/.ssh/authorized_keys"

好现在试试看ssh登录吧. 如果你想了解更多可以试试看用ssh -v登录.

使用密钥登录
jianingy@nby:~$ ssh qian.jianingy.com
Enter passphrase for key '/home/jianingy/.ssh/id_rsa':

现在输入你的passphrase, 然后就能成功登录了.的确, 到现在我们还不能无密码登录,
请再耐心点. 有个特例是, 如果你使用了空的passphrase,
那么现在已经可以无密码登录了.但是我也必须提醒你这是很不安全的做法,一销正旦有人复制了你的passphrase, 它就真的成了机房“任亏凯悔我行“了.

使用ssh-agent提供私钥


下来是最关键的部分. 前面我们把输入密码变成了输入passphrase,
这没有带来任何方便.但是,要知道有个家伙能帮助我们自动输入这个passphrase(只是看起来像是自动输入而已).
我们只要输入一次passphrase, 以后的工作就可以交给那家伙了. 它就是ssh-agent(据我所知他和agent
smith没有太多关系). 运行ssh-agent吧
jianingy@nby:~$ eval `ssh-agent`
jianingy@nby:~$ ssh-add

运行ssh-add添加密钥
jianingy@nby:~$ ssh-add
Enter passphrase for /home/jianingy/.ssh/id_rsa:
Identity added: /home/jianingy/.ssh/id_rsa (/home/jianingy/.ssh/id_rsa)

好了,现在再次登录服务器, 我们已经没有密码的烦恼了.至于为什么要用这么奇怪的方式运行ssh-agent, 你可以试着在命令行上输入一个ssh-agent回车, 看看输出什么你就会明白了.

复用已经存在的ssh-agent


果你看了上面直接运行ssh-agent的输出,你应该已经明白了ssh和ssh-agent是如何相互了解的. 没错,
通过环境变量ssh知道了与ssh-agent通信的unix
socket在哪里.然而当我们打开一个新的终端时我们必须要重新设置这个环境变量.做为一个慵懒的系统管理员,这是不可忍受的.所以我用perl写了这
脚本, 他可以找到以前的ssh-agent.

view sourceprint?
01.#!/usr/bin/env perl
02.# author: jianingy
03.# 2007/06/24
04.
05.use strict;
06.my $exist;
07.my @dirs = grep {-r $_} glob "/tmp/ssh-*";
08.foreach (@dirs) {
09. my @socks = glob("{$_}/agent.*");
10. next unless (@socks);
11. foreach (@socks) {
12. $exist = $_;
13. # check agent
14. unless (system "SSH_AUTH_SOCK=$_ ssh-add -l >/dev/null 2>&1") {
15. print "export SSH_AUTH_SOCK=$_\n";
16. exit 0;
17. }
18. }
19.}
20.
21.if ($exist) {
22. system "SSH_AUTH_SOCK=$exist ssh-add";
23. print "export SSH_AUTH_SOCK=$exist\n";
24.} else {
25. system "ssh-agent";
26. exec $0;
27.}

现在只需要在.bashrc里加入
eval `ssh-attach`

便可以在每次启动终端的时候就能复用ssh-agent了.到了这里我们已经实现了免密码的ssh登录(当然至少要输入一次passphrase, 但是相对于无数次的密码输入相信你不会在乎这一次的:P).

热点内容
工伤辅助器如何配置 发布:2025-05-20 00:25:13 浏览:600
opencv存储图片 发布:2025-05-20 00:16:10 浏览:952
ug编程链轮 发布:2025-05-20 00:14:03 浏览:99
手机锁屏壁纸配置失败怎么解决 发布:2025-05-20 00:10:38 浏览:756
源码编译的软件怎么卸载 发布:2025-05-20 00:05:29 浏览:488
access脚本 发布:2025-05-19 23:38:54 浏览:219
硬盘内存储盘材质 发布:2025-05-19 23:38:53 浏览:716
五台电脑服务器配置 发布:2025-05-19 23:33:05 浏览:277
苹果爱奇艺后台缓存 发布:2025-05-19 23:32:01 浏览:60
perl复制文件夹 发布:2025-05-19 23:31:19 浏览:294