当前位置:首页 » 存储配置 » 如何配置SSH用户免密登录

如何配置SSH用户免密登录

发布时间: 2023-01-02 16:06:09

A. SSH 实现免密登录

本文介绍如何通过 SSH 实现免密登录。

工作环境:

SSH 是一种网络协议,用于计算机之间的加密登录。SSH是英文Secure Shell的简写形式。

通过使用SSH,你可以把所有传输的数据进行加密更加安全可靠。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH 有很多功能,它既可以代替 Telnet,又可以为FTP、Pop、甚至为 PPP 提供一个安全的"通道"。

SSH 协议更多内容看最后附的链接,有兴趣的朋友可以了解一下。

什么是免密登录呢?

通常我们登录 SSH 是通过账号和免密来登录的,输入 ssh username@ip-server 然后输入密码。

如果每次都输入密码会很麻烦,而且要对多台主机进行自动化管理,每次都要输入密码不现实。我们可以配置公钥和密钥进行免密登录。 免密登录做的事情其实就是通过 SSH 的公钥和密钥来校验身份信息。

首先你要知道每台主机有一份公钥和一份私钥。我们要做的事情可以用一张图来表示:

图片的操作依次为

1.生成密匙对

之后可以在 /root/.ssh 中看到生成的密匙对

2.拷贝一份 A 的公钥给 B

此时在 B 的 authorized_keys 中就会有一份 A 的 id_rsa.pub 公钥信息。

注:第二步操作的做的事情其实就是一个拷贝密钥的工作,也可以手动拷贝,但是用上面的命令更方便。

3.最后我们就可以免密登录,也就是不输入密码 A 就可以登录 B

192.168.0.10 为 B 的 ip 地址

如果要退出登录,输入 exit 即可。

192.168.0.10 是 ip 地址,也就是说登录的时候我们还要输入一次 ip。我们可以给每个主机配置一个别名,用 ssh ip-server 的方式登录。

就像人有身份证也有名字一样,我们可以通过 ip 来辨识主机。给他一个别名就是给一个 hostname 。

可以用 hostname 来查看你的主机名,要改主机名改他的配置文件

重启生效

这样主机名已经改掉了,还差一步。我们要让主机名和我们的 ip 关联在一起,修改 /etc/hosts 文件

例如:

两边都配置完成可以用 ssh slave 直接连接 slave 。如果你想自己免密连接自己那就按照上面的步骤给自己配置一份密匙就行了,动手试试吧。

SSH 协议介绍

数字签名是什么

SSH原理与运用(一):远程登录

SSH原理与运用(二):远程操作与端口转发

如何在CentOS 7上修改主机名

B. Windows下设置SSH免密

    笔者以前在linu之间配置SSH秘钥来完成免密,为了方便Windows Terminal使用,ssh又无法直接在命令行指定密码,于是就需要配置一下Windows到linux的免密,公钥的分发需要手动scp传递,新建公钥文件时需要注意权限问题。

1、Windows生成密钥对

    在cmd运行ssh-keygen -t rsa ,在目录下生成一个 .ssh 文件夹,其中包含私钥文件 id_rsa 和公钥文件 id_rsa.pub。

    2、将公钥复制到远程主机

    在Linux中有ssh--id命令将公钥复制到远程主机,但是Windows下可没有哦,那么就需要手动分发。下面使用scp命令来远程传递文件,也可以使用winscp可视化操作。

scp id_rsa.pub [email protected]:/home/pi/.ssh

    然后进入到远程主机将id_rsa.pub重命名为authorized_keys。

    mv id_rsa.pub authorized_keys

    为了保存公钥也可以cat  id_rsa.pub >> authorized_keys,或cp  id_rsa.pub  authorized_keys 。

    3、配置完成后测试正常。

    上面的是Windows登陆树莓派免密配置,但是笔者配置Windows登陆centos7虚拟机时无法完成公钥认证,导致免密失败。

    查看调试信息:ssh -v [email protected] ,感觉是无法认证公钥。

    关闭centos7的/etc/ssh/sshd_config配置文件中秘密认证登陆后:Permission denied (publickey,gssapi-keyex,gssapi-with-mic),应该是配置文件的错误。密钥在树莓派上可以正常识别认证的。但是笔者测试修改了一个几个配置条目都不行,都不知道那里有问题,带以后再工作中解决吧,一时半会也搞不定。

2021年3月9日:

    笔者在红帽redhag生产系统上查看/etc/ssh/sshd_config配置文件,发现配置文件是保持默认的,都没有修改,但是在末尾添加了一个AllowUsers,笔者将其修改后加入到centos系统中但是还是不行。

    AllowUsers *@192.168.*.*

    最后找到了一个权限问题,即使authorized_keys文件权限问题,因为是笔者在.ssh目录下新建的文件的默认权限是-rw-rw-r-- (664),对于authorized_keys来说权限过大,修改为644后就可以了。

    测试结果如下。

    还有可以免去输入用户的麻烦,这就需要解决解决本地登陆用户与远程登陆用户不一致的问题。在.ssh文件夹下新建config文件,并写入ip和用户名信息。接下来就可以使用ssh mycentos来免密免用户登陆了。

C. Windows ssh 免密登录

做这个目的也是平常工作里遇到的问题,一个是使用jupiter lab进行本地数据重定向时,需要输入密码,二是使用scp进行本地远端文件互传时需要输入密码。对我我这么懒的人来说这么可以这么麻烦呢,打开浏览器一阵猛搜,其实设置起来很简单。

原理大概就是,在本地生成一个ssh公钥,在服务器端把这个公钥放入ssh相关的配置文件里,你的这个服务器账号就认识生了成这个公钥的电脑了,他俩熟了就不用通行证啦(瞎比比的,个人理解)。

设置过程

D. ssh配置免密登录

假设有两台Linux的服务器,A(192.168.240.1)、B(192.168.240.2),现在想通过A服务器免密登录B服务器,那么首先需要将A服务器的SSH公钥复制到B服务器的授权列表文件中(就是authorized_keys文件中)

E. Linux 配置SSH免密登录

【比如:Jenkins构建时都是以jenkins用户进行操作,所以要以jeknins用户来配置免密钥登录。】
su - root

ssh-keygen -t rsa

A
[sjfuser@jenkins ~]$ ll /root/.ssh/
-rw-------. 1 sjfuser sjfuser 1671 4月 19 05:10 id_rsa
-rw-r--r--. 1 sjfuser sjfuser 398 4月 19 05:10 id_rsa.pub
-rw-r--r--. 1 sjfuser sjfuser 417 4月 19 05:08 known_hosts
B
-rw------- 1 root root 1217 Apr 21 10:46 /root/.ssh/authorized_keys

将此公钥写入任何一台远程主机的/root/.ssh/authorized_keys后,便可通过密钥登陆到远程主机。
任何一台主机,拿到该密钥id_rsa后,便可登陆写入了该公钥id_rsa.pub的主机。

如果添加指纹的时候提示添加失败,是因为你以前添加过了这个ip的指纹。
解决办法:将.ssh目录的known_hosts文件删除掉。也可以打开这个文件把对应ip的那条记录删除。

https://blog.csdn.net/qq_30059235/article/details/103890477

https://blog.csdn.net/fireofjava/article/details/40624215

F. 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~

G. 阿里云主机ssh 免密码登录

阿里云主机ssh 免密码登录

操作系统: CentOS 7.0 64位

CPU: 1 核

公网IP: 78.129.23.45

用户名: root

密码:bugaosuni

我在VMware下安装的Ubuntu 14.04.本文的主要目的就是在Ubuntu上能够免密码登录云主机。

具体设置步骤

Ubuntu 客户端

在该文件夹下就会产生三个文件夹:id_rsa,id_rsa.pub,know_hosts。

id_rsa:存储私钥,记得只能自己看哦。别人那到这个文件就完蛋蛋咯。

id_rsa.pub:存储公钥,用来通信加密使用,有了这个人家才能确定这是你。

scp id_ rsa.pub [email protected]:/root/.ssh/id_ rsa.pub

Note:云主机上没有.ssh/文件时,你要自己建立一个。

云主机端

rm id_rsa.pub

Ubuntu 客户端

这个时候就可以登录云主机了

ssh [email protected]

scp远程拷贝文件时提示错误:

Warning: Permanently added '10.0.0.182' (RSA) to the list of known hosts.

Permission denied (publickey).

解决:

登录10.0.0.182,将/etc/ssh/sshd_config文件中的PasswordAuthentication no 改为PasswordAuthentication yes

重启sshd服务:/etc/init.d/sshd restart

问题解决。

原因:scp是基于ssh的拷贝服务,ssh在没有密钥登录的情况下,禁用了密码登录,故出现如上错误。

服务端SSH 服务配置了禁止root用户登录策略。

处理办法

说明:相关策略可以提高服务器的安全性。请用户基于安全性和易用性权衡后,再确定是否需要修改相关配置。

要解决此问题,请进行如下配置检查和修改:

参数说明:

未配置该参数,或者将参数值配置为 yes (默认情况),都允许 root 用户登录。只有显示的设置为 no 时,才会阻断root 用户登录。

该参数只会影响用户的 SSH 登录,不影响用户通过 管理终端 等其它方式登录系统。

如果需要修改相关策略配置,在继续之前建议进行文件备份。

使用 vi 等编辑器,将参数值设置为 yes,或者整个删除或注释(在最开头添加 # 号)整行配置。比如:# PermitRootLogin yes

使用如下指令重启 SSH 服务:service sshd restart

尝试再次使用 root 用户登录服务器。

出现的问题以及解决方案

当出现Permission denied (publickey,gssapi-keyex,gssapi-with-mic) 警告的时候,恭喜你,你已经离成功很近了。

远程主机这里设为slave2,用户为Hadoop。

本地主机设为slave1

以下都是在远程主机slave2上的配置,使得slave1可以免密码连接到slave2上。如果想免密码互联,原理一样的,在slave1上也这么配置即可!

(1)首先:配置ssh服务器配置文件。

在root 用户下才能配置。

vi /etc/ssh/sshd_config

权限设为no:

如果前面有# 号,将#号去掉,之后将yes修改为no。

修改之后为:

PermitRootLogin no

UsePAM no

PasswordAuthentication no

权限设为yes:

RSAAuthentication yes

PubkeyAuthentication yes

(2)重启sshd服务

systemctl restart sshd.service

systemctl status sshd.service #查看ssh服务的状态

正常情况下应该是Active:active(running)

(3)修改文件夹以及文件的权限。

(4)在slave1上进行测试

ssh slave2

今天处理 ssh连接至 ubuntu 服务器时,提示以下错误:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Someone could be eavesdropping on you right now (man-in-the-middle attack)!

It is also possible that a host key has just been changed.

The fingerprint for the RSA key sent by the remote host is

da:f7:3e:ba:f7:00:e6:44:76:f2:58:6e:48:******.

Please contact your system administrator.

Add correct host key in /用户home目录/.ssh/known_hosts to get rid of this message.

Offending RSA key in /用户home目录/.ssh/known_hosts:1

RSA host key for ip地址 has changed and you have requested strict checking.

Host key verification failed.

经过google,出现这个问题的原因是,第一次使用SSH连接时,会生成一个认证,储存在客户端的known_hosts中。

可使用以下指令查看:

ssh-keygen -l -f ~/.ssh/known_hosts

由于服务器重新安装系统了,所以会出现以上错误。

解决办法

ssh-keygen -R 服务器端的ip地址

会出现以下提示:

/用户home目录/.ssh/known_hosts updated.

Original contents retained as /用户home目录/.ssh/known_hosts.old

重新连线,出现以下提示:

The authenticity of host '192.168.3.10 (192.168.3.10)' can't be established.

RSA key fingerprint is da:f7:3e:ba:f7:00:e6:44:76:f2:58:6e:48:****.

Are you sure you want to continue connecting (yes/no)?

H. 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公钥认证失败问题

I. Linux免密码SSH登录(公钥登录)

SSH有两种登录方式, 一是口令登录, 即常规的用户名密码登录; 二是公钥登录, 只要在server端配置好client端的公钥, 就可以实现免密登录. 控制端为client端, 远程主机为server端, 下同.

在client端输入命令然后一路回车

运行结束以后,在client端~/.ssh/目录下,会新生成两个文件: id_rsa.pub 和 id_rsa 。前者是你的公钥,后者是你的私钥。这时再输入如下命令,将公钥传送到远程主机host上面:

server端将用户上传的公钥,保存在用户主目录的 ~/.ssh/authorized_keys 文件中。

原本以上配置就ok了,但是OpenWrt的ssh采用的是dropbear,一种轻量级的ssh服务。需要对其进行额外配置:

大功告成 ->

SSH参考资料: SSH原理与运用(一):远程登录

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:597
制作脚本网站 发布:2025-10-20 08:17:34 浏览:890
python中的init方法 发布:2025-10-20 08:17:33 浏览:584
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:768
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:688
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1015
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:259
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:118
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:808
python股票数据获取 发布:2025-10-20 07:39:44 浏览:716