最后发现,是密钥文件的权限问题,
一般来说:
对ssh目录设置700权限
对id_rsa,authorized_keys文件设置600权限
对id_rsapub,known_hosts文件设置644权限
所以,权限设置不对的话ssh登陆不上Linux系统
作为系统管理员,你计划在 Linux 上使用 OpenSSH,完成日常工作的自动化,比如文件传输、备份数据库转储文件到另一台服务器等。为实现该目标,你需要从主机 A 能自动登录到主机 B。自动登录也就是说,要在 shell 脚本中使用ssh,而无需要输入任何密码。
本文会告诉你怎样在 CentOS/RHEL 上设置 SSH 免密码登录。自动登录配置好以后,你可以通过它使用 SSH (Secure Shell)和安全复制 (SCP)来移动文件。
SSH 是开源的,是用于远程登录的最为可靠的网络协议。系统管理员用它来执行命令,以及通过 SCP 协议在网络上向另一台电脑传输文件。
通过配置 SSH 免密码登录,你可以享受到如下的便利:
用脚本实现日常工作的自动化。
增强 Linux 服务器的安全性。这是防范虚拟专用服务器(VPS)遭受暴力破解攻击的一个推荐的方法,SSH 密钥单凭暴力破解是几乎不可攻破的。
什么是 ssh-keygen
ssh-keygen 是一个用来生成、创建和管理 SSH 认证用的公私钥的工具。通过 ssh-keygen 命令,用户可以创建支持SSH1 和 SSH2 两个协议的密钥。ssh-keygen 为 SSH1 协议创建 RSA 密钥,SSH2 则可以是 RSA 或 DSA。
什么是 ssh-copy-id
ssh-copy-id 是用来将本地公钥拷贝到远程的 authorized_keys 文件的脚本命令,它还会将身份标识文件追加到远程机器的 ~/ssh/authorized_keys 文件中,并给远程主机的用户主目录适当的的权限。
SSH 密钥
SSH 密钥为登录 Linux 服务器提供了更好且安全的机制。运行 ssh-keygen 后,将会生成公私密钥对。你可以将公钥放置到任意服务器,从持有私钥的客户端连接到服务器的时,会用它来解锁。两者匹配时,系统无需密码就能解除锁定。
在 CentOS 和 RHEL 上设置免密码登录 SSH
以下步骤在 CentOS 5/6/7、RHEL 5/6/7 和 Oracle Linux 6/7 上测试通过。
节点1 : 19216809 节点2 : 192168l10
步骤1 :
测试节点1到节点2的连接和访问:
[root@node1 ~]# ssh root@192168010The authenticity of host '192168010 (192168010)' can't be establishedRSA key fingerprint is 6d:8f:63:9b:3b:63:e1:72:b3:06:a4:e4:f4:37:21:42Are you sure you want to continue connecting (yes/no) yesWarning: Permanently added '192168010' (RSA) to the list of known hostsroot@192168010's password:Last login: Thu Dec 10 22:04:55 2015 from 19216801[root@node2 ~]#步骤二:
使用 ssh-key-gen 命令生成公钥和私钥,这里要注意的是可以对私钥进行加密保护以增强安全性。
[root@node1 ~]# ssh-keygenGenerating public/private rsa key pairEnter file in which to save the key (/root/ssh/id_rsa):Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /root/ssh/id_rsaYour public key has been saved in /root/ssh/id_rsapubThe key fingerprint is:b4:51:7e:1e:52:61:cd:fb:b2:98:4b:ad:a1:8b:31:6d root@node1ehowstufflocalThe key's randomart image is:+--[ RSA 2048]----+| ++ || o o o || o o o || o + || S || || o E ooo || = ooo || oo |+-----------------+步骤三:
用 ssh-copy-id 命令将公钥复制或上传到远程主机,并将身份标识文件追加到节点2的 ~/ssh/authorized_keys 中:
[root@node1 ~]# ssh-copy-id -i ~/ssh/id_rsapub 192168010root@192168010's password:Now try logging into the machine, with "ssh '192168010'", and check in:ssh/authorized_keysto make sure we haven't added extra keys that you weren't expecting步骤四:
验证免密码 SSH 登录节点2:
[root@node1 ~]# ssh root@192168010Last login: Sun Dec 13 14:03:20 2015 from我希望这篇文章能帮助到你,为你提供 SSH 免密码登录 CentOS / RHEL 的基本认知和快速指南。
摘自H3C官网:>第1步:在本地主机中生成“密钥对”并将公钥传送到远程服务器中:[root@linuxprobe ~]# ssh-keygen
Generating public/private rsa key pair
Enter file in which to save the key (/root/ssh/id_rsa):直接敲击回车或设置密钥的存储路径
Created directory '/root/ssh'
Enter passphrase (empty for no passphrase): 直接敲击回车或设置密钥的密码
Enter same passphrase again: 再次敲击回车或设置密钥的密码
Your identification has been saved in /root/ssh/id_rsa
Your public key has been saved in /root/ssh/id_rsapub
The key fingerprint is:
40:32:48:18:e4:ac:c0:c3:c1:ba:7c:6c:3a:a8:b5:22 root@linuxprobecom
The key's randomart image is:
+--[ RSA 2048]----+
|+o |
|o + |
|o |
|+ |
|o S |
| + |
| = |
|E+ |
|+o |
+-----------------+
第2步:将生成好的私钥文件传送至远程主机:
[root@linuxprobe ~]# ssh-copy-id 1921681020
The authenticity of host '1921681020 (1921681020)' can't be established
ECDSA key fingerprint is 4f:a7:91:9e:8d:6f:b9:48:02:32:61:95:48:ed:1e:3f
Are you sure you want to continue connecting (yes/no) yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@1921681020's password:此处输入远程服务器主机密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '1921681020'"
and check to make sure that only the key(s) you wanted were added
第3步:设置服务器主机只允许密钥验证,拒绝传统口令验证方式,记得修改配置文件后保存并重启sshd服务程序哦~:
[root@linuxprobe ~]# vim /etc/ssh/sshd_config
………………省略部分输出信息………………
74
75 # To disable tunneled clear text passwords, change to no here!
76 #PasswordAuthentication yes
77 #PermitEmptyPasswords no
78 PasswordAuthentication no
79
………………省略部分输出信息………………
[root@linuxprobe ~]# systemctl restart sshd
第4步:在客户端主机尝试登陆到服务端主机,此时无需输入密码口令也可直接验证登陆成功:
[root@linuxprobe ~]# ssh 1921681020
Last login: Mon Apr 13 19:
ssh登录密码不正确,是设置错误造成的,解决方法如下:
1、首先生成密钥对,在终端输入ssh-keygen -t rsa。
2、路径密码等设置,直接回车默认就可以了。
3、这时在root目录下,生成一个ssh的文件夹,里面存放的是密钥,分别是公钥(id_rsapub),私钥(id_rsa),已知的公钥清单(known_hosts)。
4、复制公钥到远程服务器上ssh-copy-id,输入yes。
5、输入远程服务器的密码,一般来说都是root密码了,默认使用的是root账户。
6、把公钥复制过去之后,在com1登录com3,可以发现,没有之前那种密码验证了。
最近在看spark的书籍,书中第一步搭建单机spark的时候,有一个 *** 作是设置ssh无密码的登陆了。万万没想到,在这一步就卡住了。已经成功配置了免密登陆,但是ssh localhost还是需要输入密码。在阿里云香港服务器挂掉之后,百度了两天才找到解决方法。特此记录。查看日志是分析问题中很重要的一环,因为ssh中会出现各种不同的问题,每种问题的解决方法不一样。
ssh -vvv localhost 报的错误信息
日志显示ssh跳过了dsa的认证方式,最后只能通过密码认证的方式。
通过查询资料发现,ssh 70之后就已经默认关闭了dsa认证方式。
于是修改ssh的配置文件ssh_config,在验证方式中加入dsa
按照教程修改完配置文件后,ssh localhost任然需要输入密码,查看日志如下。·
可以看出修改过后,ssh时已经提供了DSA秘钥,但是好像校验没有通过,所以最后还是进入了输入密码验证的环节。
通过查阅资料和自己推理,问题可能出在服务端校验不通过,因为服务器端也不支持dsa这种认证方式,那就试着修改一下服务器端的配置文件。
ssh_config 和 sshd_config 分别是ssh客户端和服务器端的配置文件,ssh localhost就是一个本地客户端向本地服务器请求的过程。
修改sshd文件后,ssh localhost还是需要密码。就在我差点自闭的时候,看到有帖子说要重启一下ssh服务器。
重启完成后,ssh localhost免密登陆成功。长舒一口气。
后来经过测试,修改ssh配置文件不用重启服务,但是修改sshd配置文件,是要重启才能生效的。
据说是因为dsa是不加密的,后面都改用rsa了,遇上同样问题的小伙伴可以自己去查一下。
``
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)