千家信息网

Linux ssh免秘钥登陆怎么实现

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"Linux ssh免秘钥登陆怎么实现",在日常操作中,相信很多人在Linux ssh免秘钥登陆怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"L
千家信息网最后更新 2026年11月03日Linux ssh免秘钥登陆怎么实现

这篇文章主要介绍"Linux ssh免秘钥登陆怎么实现",在日常操作中,相信很多人在Linux ssh免秘钥登陆怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Linux ssh免秘钥登陆怎么实现"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

需求

IP1:1.1.1.1 账户kg

IP2:1.1.1.2 账户kg

想实现 IP1 免秘钥登陆 IP2 步骤如下

登陆到1.1 然后cd ~/.ssh, shell 中运行 ssh-keygen -t rsa 命令,生成密钥文件

一直按回车键,会出现如上图,也会有你的公私钥文件的路径,比如我的:/home/lx-yf/.ssh/id_rsa.pub

3.在相应的目录下/home/lx-yf/.ssh/ 查看生成的密钥文件,其中:id_rsa为私钥文件,id_rsa.pub为公钥文件

4.本地机器执行命令如: ssh-copy-id -i /home/lx-yf/.ssh/id_rsa.pub kg@1.1.1.2, 将公钥文件传输的远程机器,并生效,期间会让你再次输一次你的密码,如下图,输入一下 就好

5.完成标志如下图

6.再次使用已经做免密处理的用户登录远程机器,已经不需要密码了,免密登录处理完成。

本地IP 1.1.1.1 ssh kg@1.1.1.2 可直接登陆了

7.查看远程机器的authorized_keys文件,可以看到对应的变化:本地机器的公钥已经增加到远程机器的配置文件中了

8.注意事项

  1. 免密码登录的处理是用户对用户的,切换其他用户后,仍然需要输入密码

  2. 公钥传到远程机器并生效的操作,可用其他方式实现,如scp后修改authorized_keys

  3. 远程机器的.ssh目录需要700权限,authorized_keys文件需要600权限

上面是 手动实现 两个IP 之间的免秘钥登陆,接下来说下多个服务器之间免秘钥登陆

想通过ssh-copy-id将本地的~/.ssh/id_rsa.pub拷贝到另外一台机器,从而实现免密码登录,结果拷贝之后,ssh登录远程机器的时候提示

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Permissions 0777 for '~/.ssh/id_rsa' are too open.It is required that your private key files are NOT accessible by others.This private key will be ignored.Load key "~/.ssh/id_rsa": bad permissionsuser@remoteip's password:

是因为id_rsa的权限太高了,以前是777,解决方式如下:

cd ~/.sshchmod 700 id_rsa

SSH免密登陆操作跟 免密登陆时底层验证机制如下图

如果没有安装ssh,在命令行下输入:yum install ssh进行安装 或者apt-get install ssh,可以参考下面的博文

http://www.cnblogs.com/alaska1131/articles/1659654.html

<2>在客户端节点创建密钥文件

查看客户端节点是否已经创建了密钥文件,我们一centosNameNode为例。打开命令行,输入以下

指令: ls ~/.ssh,查看是否有密钥存在。

输入完ssh-keygen - rsa后,一直默认Enter下去,密码为空就行。如下图所示,说明生成密钥成功

好,到这里,客户端节点的密钥文件已经创建完成,按照上述方法,依旧在centosDateNode1节点和

centosDateNode2节点上一次创建密钥文件。

5.将各客户端节点的公钥写入centosNameNode中

<1>将centosNameNode自己的公钥写入到自己的~/.ssh/authorized_keys中

打开命令行,输入

OK,然后,就是修改sshd以及上面所提到的authorized_keys以及目录~/.ssh权限的修改

<2>centosNameNode中权限以及修改sshd

修改目录~/.ssh以及~/.ssh/authorized_keys文件的权限,打开命令行,输入:

<3>验证自己ssh自己

打开命令行,输入:

ssh 192.168.10.66 #centsoNameNode的ip

发现并没有要求输入密码,而是自动登陆了,说明自己的配置成功了,事实上Hadoop的伪分布式模

式就是自己远程登陆自己

说明上传成功,然后,登录到centosNameNode上,查看是否收到,输入指令:

cd /home/roboson #切换目录

ls #查看目录下的文件

然后,输入vi ~/.ssh/authorized_keys指令,发现文件中又多了一堆数字

有的时候,会报这样的错

Agent admitted failure to sign using the key

解决方法:

在当前用户下执行命令:

ssh-add

然后,利用同样的方法,将centosDateNode2的公钥也加入。

6.将在centosNameNode中整合的文件掺入剩余两个节点

登录到centosNameNode上,然后,打开命令行,输入指令:

    cd ~/.ssh     scp authorized_keys 192.168.10.67:/home/roboson/.ssh/authorized_keys  #将整合好的 ahthorized_keys传递给centosDateNode1

上面比较琐碎,其实 汇总公钥的时候用 ssh-copy-id 指令比较好。

ssh-copy-id -i .~/ssh/id_rsa.pub 目标机器用户名@目标IP

sh-copy-id命令可以把本地主机的公钥复制到远程主机的authorized_keys文件上,

ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。

ssh-copy-id命令可以把本地的ssh公钥文件安装到远程主机对应的账户下。
达到的功能:
ssh-copy-id - 将你的公共密钥填充到一个远程机器上的authorized_keys文件中。

使用模式:
ssh-copy-id [-i [identity_file]] [user@]machine

描述:
ssh-copy-id 是一个实用ssh去登陆到远程服务器的脚本(假设使用一个登陆密码,
因此,密码认证应该被激活直到你已经清理了做了多个身份的使用)。
它也能够改变远程用户名的权限,~/.ssh和~/.ssh/authorized_keys
删除群组写的权限(在其它方面,如果远程机上的sshd在它的配置
文件中是严格模式的话,这能够阻止你登陆。)。

如果这个 "-i"选项已经给出了,然后这个认证文件(默认是~/.ssh
/id_rsa.pub)被使用,不管在你的ssh-agent那里是否有任何密钥。

另外,命令 "ssh-add -L" 提供任何输出,它使用这个输出优先于
身份认证文件。如果给出了参数"-i"选项,或者ssh-add不产生输出,
然后它使用身份认证文件的内容。一旦它有一个或者多个指纹,它使
用ssh将这些指纹填充到远程机~/.ssh/authorized_keys文件中。

==============================

ssh登录时在参数中加入密码的解决方案

有时候机器设定防火墙了 必须输入密码可以如下方法,在使用ssh登录远程服务器的时候,在执行完ssh user@ip后,要输入登录密码,有时候登录密码记不住,这样以来Ian带来的很多的麻烦,有没有一种在ssh的参数中直接加入密码的方法呢?查看ssh的帮助我们发现ssh命令并不能在参数中制定密码。

usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]           [-D [bind_address:]port] [-E log_file] [-e escape_char]           [-F configfile] [-I pkcs11] [-i identity_file] [-L address]           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]           [-Q query_option] [-R address] [-S ctl_path] [-W host:port]           [-w local_tun[:remote_tun]] [user@]hostname [command]

于是google,找到 sshpass

sshpass:用于非交互的ssh 密码验证,允许你用 -p 参数指定明文密码,然后直接登录远程服务器。 它支持密码从命令行,文件,环境变量中读取。

首先在机器上安装sshpass

对于debian/ubuntu系统来说,安装方式很简单:

sudo apt-get install sshpass

对于其他的linux,可以编译sshpass的源码安装:

wget http://sourceforge.net/projects/sshpass/files/sshpass/1.05/sshpass-1.05.tar.gz  tar xvzf sshpass-1.05.tar.gz  ./configure make  sudo make install

安装好之后,使用sshpass命令,得到如下:

Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters   -f filename   Take password to use from file   -d number     Use number as file descriptor for getting password   -p password   Provide password as argument (security unwise)   -e            Password is passed as env-var "SSHPASS"   With no parameters - password will be taken from stdin   -h            Show help (this screen)   -V            Print version informationAt most one of -f, -d, -p or -e should be used

于是把sshpass和ssh命令集合就能实现ssh登录的时候加入密码了,这样把登录某台计算机的命令写成shell脚本,后面就十分的方便了

#!/bin/bashsshpass -p "XXX" ssh user@IP

到此,关于"Linux ssh免秘钥登陆怎么实现"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

文件 密码 命令 登陆 机器 登录 输入 公钥 密钥 权限 用户 目录 节点 方法 参数 指令 时候 主机 客户 客户端 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海睿民互联网科技有限公司 科技互联网政务服务 金融科技与互联网金融 高科技与互联网 深圳互联网络科技有限公司 浩特互联网科技 时间互联网络科技 友谊互联网络科技 顺玮阁互联网科技 伴你行互联网科技有限公司 互联网养老 桔豆科技 镁科技互联网资讯平台 欧洲十大科技互联网公司 宁夏众和广鑫互联网科技有限公司 厦门千工互联网科技有限公司 互联网科技产业特征 为客找房互联网科技公司怎么样 梅州GM互联网络科技有限公司 厦门江牛科技互联网 广州互联网高科技取餐柜 百单网互联网科技有限公司 期待互联网科技 哈尔滨新华互联网科技学院 荆州市昕露互联网络科技有限公司 苏州五指互联网络科技有限 玉溪新华互联网科技好不好 互联网金融科技公司的优势 新氧科技和美国互联网有关系吗 全球科技与互联网公司市值变化 易租星互联网科技有限公司
0