这篇文章主要介绍“Linux ssh免秘钥登陆怎么实现”,在日常操作中,相信很多人在Linux ssh免秘钥登陆怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux ssh免秘钥登陆怎么实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
成都创新互联主要从事成都网站制作、网站设计、外贸网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务平山,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575
需求
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.注意事项
免密码登录的处理是用户对用户的,切换其他用户后,仍然需要输入密码
公钥传到远程机器并生效的操作,可用其他方式实现,如scp后修改authorized_keys
远程机器的.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 permissions user@remoteip's password:
是因为id_rsa的权限太高了,以前是777,解决方式如下:
cd ~/.ssh chmod 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 information At most one of -f, -d, -p or -e should be used
于是把sshpass和ssh命令集合就能实现ssh登录的时候加入密码了,这样把登录某台计算机的命令写成shell脚本,后面就十分的方便了
#!/bin/bash sshpass -p "XXX" ssh user@IP
到此,关于“Linux ssh免秘钥登陆怎么实现”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
本文名称:Linuxssh免秘钥登陆怎么实现
浏览地址:http://lswzjz.com/article/jpjshc.html