`

服务器之间通过SSH免密码通信(已验证)

 
阅读更多
(一)问题:

假如我们现在有两台机器:ServerA和ServerB,现在想要让ServerA不用输入密码就能够进行访问。
(二)方法和原理:
我们使用ssh-keygen在ServerA上生成private和public密钥,将生成的public密钥拷贝到远程机器ServerB上后,就可以使用ssh命令无需密码登录到另外一台机器ServerB上。
在linux系统中,ssh是远程登录的默认工具,因为该工具的协议使用了RSA/DSA的加密算法【默认是DSR算法】,该工具做linux系统的远程管理是非常安全的。
(三)实验步骤:
1.登录ServerA
2.ssh-keygen -t  rsa,将会生成公钥和私钥文件id_rsa和id_rsa.pub【如果一直回车下去,最后这两个文件应该在/home/$USER/.ssh下面】
3.将 .pub 文件复制到ServerB机器的 .ssh 目录下,并保存为authorized_keys
可以使用:
ssh-cop-id命令会将指定的公钥文件复制到远程计算机
[oracle@Test232 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub oracle@192.168.55.232
28
oracle@192.168.55.232's password:
Now try logging into the machine, with "ssh 'oracle@192.168.55.232'", and check in:

.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

[oracle@Test232 ~]$ ssh oracle@192.168.55.232
oracle@192.168.55.232's password:
Last login: Thu Nov 24 16:05:32 2011 from 192.168.55.229
[oracle@Test232 ~]$
4.大功告成,从A机器登录B机器的目标账户,不再需要密码了
5.设置文件和目录权限【这一步可以省略,但是为了安全起见,加上也是有必要的~】
设置authorized_keys权限
chmod 644 authorized_keys
设置.ssh目录权限
chmod 700 -R .ssh
6.要保证.ssh和authorized_keys都只有用户自己有写权限。否则验证无效。(今天就是遇到这个问题,找了好久问题所在),其实仔细想想,这样做是为了不会出现系统漏洞。
报错:
The authenticity of host '192.168.20.59 (192.168.20.59)' can't be established. 
RSA key fingerprint is 6a:37:c0:e1:09:a4:29:8d:68:d0:ca:21:20:94:be:18. 
Are you sure you want to continue connecting (yes/no)? yes 
Warning: Permanently added '192.168.20.59' (RSA) to the list of known hosts. 
root@192.168.20.59's password:  
Permission denied, please try again. 
root@192.168.20.59's password:  
Permission denied, please try again. 
root@192.168.20.59's password:  
Permission denied (publickey,gssapi-with-mic,password). 
如果说以上权限没有问题的话,那就赶紧去看看你的配置文件吧,因为有人会喜欢改这个东东,导致你无论如何都不会成功:
打开/etc/ssh/ssh_config文件,找到以下部分:
#   IdentityFile ~/.ssh/identity
   IdentityFile ~/.ssh/id_rsa
看看你的私钥名字是不是这个 ~/.ssh/id_rsa

哈哈,还是得好好看配置文件喽~

假如有台中控机已经打通了到各台应用主机间的无密码远程登陆,现在需要打通另一台中控,下面是我写的脚本来实习此功能:

############################################ 实现中控无密码登陆 ############################################

#!/bin/bash
#Author:zhuying
scriptdir=/home/oracle/zy/changecps
for ip in `grep -v ^# "$scriptdir"/cps.ip`
do
scp /home/oracle/zy/changecps/169keys oracle@$ip:~/ </dev/null
        ssh $ip "cat ~/169keys >> /home/oracle/.ssh/authorized_keys;rm ~/169keys" </dev/null
        ssh $ip "cat /home/oracle/.ssh/authorized_keys|sort|uniq > /home/oracle/.ssh/tmp.keys" </dev/null
        ssh $ip "mv /home/oracle/.ssh/tmp.keys /home/oracle/.ssh/authorized_keys" </dev/null
        ssh $ip "chmod 644 /home/oracle/.ssh/authorized_keys" </dev/null
done
###########################################  实现中控无密码登陆 ##############################################

ps:

如果我们添加公钥后,还是无法访问,也可能是ServerA主机上面的一个文件known_hosts中已经存在ServerB的ip信息,删除重新访问即可。

另外,如果以上方法尝试过后还是不行,可能是因为登录失败次数过多被锁定,这个时候我们就需要去看看我们的系统日志了/var/log/messages,将之前的锁定信息日志删除就可以了。

参考文章:

http://os.51cto.com/art/200812/101989_1.htm
问题:
(1)Connection closed by $IP可能是超过系统默认失败次数了,然后清理就ok了~【faillog -a;faillog -r】
(2)在前面步骤都正确无误的情况下,每次远程登录还是提示让输入密码,这时候有可能是权限问题:
  chmod 644 authorized_keys再次登录就ok了~【如果是Red Hat 5.6的话,最好改成600,否则认为是不安全的~】
分享到:
评论

相关推荐

    WINSCP-SFTP SSH免密码登录

    **描述解析:** "WINSCP 可创建密钥交互SSH免密码登录" 表示WINSCP支持配置SSH密钥对,通过公钥认证的方式,使得用户在每次连接SFTP服务器时,不再需要手动输入私钥对应的密码,提高工作效率并增强安全性。...

    SSH无密码登录配置(主要针对Hadoop配置)

    在Hadoop这样的分布式计算环境中,SSH无密码登录配置至关重要,因为它简化了节点间的通信,提高了运维效率。以下是关于SSH无密码登录配置的详细解释。 **一、SSH原理** SSH通过加密网络数据流,确保在非安全网络上...

    SSH2用户名密码验证

    然而,在这个例子中,我们的目标是通过SSH连接到MySQL数据库进行用户验证。这通常涉及使用`ChannelExec`或`ChannelShell`来执行SQL查询。例如,你可以创建一个`ChannelExec`,然后运行一个简单的SELECT语句来验证...

    telnet和ssh登陆验证

    在IT行业中,网络服务的远程访问管理是至关重要的,telnet和SSH(Secure Shell)是两种常见的远程登录协议,用于实现客户端与服务器之间的安全通信。本文将深入探讨这两种协议的工作原理、特点以及如何进行登陆验证...

    两台linux机器之间ssh不需要密码详解

    本文将详细介绍如何在两台Linux机器之间设置SSH免密码登录,并确保其安全性和便捷性。 #### SSH无密码登录原理 SSH(Secure Shell)是一种加密的网络协议,用于计算机之间的通信。SSH无密码登录主要依赖于公钥加密...

    服务器间通过ssh使用密钥对实现无密码登录solaris.doc

    通过以上步骤,你可以在Solaris、Redhat等Linux系统之间实现基于SSH的无密码登录,提升运维效率,同时保证了通信的安全性。这种方式也适用于区块链相关的运维工作,因为区块链网络通常涉及到多台服务器的交互和数据...

    SSH远程连接linux服务器工具

    SSH协议提供了身份验证和加密功能,确保了用户与服务器之间的通信不会被窃听或篡改。这对于管理和维护远程服务器尤其重要,尤其是当服务器位于互联网上时。 描述中提到的"免费,操作简单,命令行以及文件上传下载...

    通过Ssh协议连接到服务器执行执行的指令

    SSH是一种网络协议,用于安全地在两台计算机之间进行通信,特别是用于管理员对服务器进行远程操作。它允许用户执行命令、传输文件等,同时通过加密确保数据的安全性。 在IT行业中,SSH是运维人员日常工作中必不可少...

    winxp下通过ssh与本机通信

    在本文中,我们将详细探讨如何在Windows XP环境下设置并使用SSH来与本地机器进行通信。 首先,我们需要安装一个SSH服务器和客户端。由于Windows XP原生并不支持SSH,所以我们需要第三方软件,例如PuTTY(客户端)和...

    通过SSH连接RDS服务器上的MySQL数据库

    在IT领域,SSH(Secure Shell)是一种网络协议,用于...总结,通过SSH连接RDS服务器上的MySQL数据库涉及了网络连接、身份验证、数据库管理和安全实践等多个方面。熟练掌握这一技能对于远程管理和维护数据库至关重要。

    ssh远程登录服务器软件

    SSH通过加密所有传输的数据,确保了用户与远程服务器之间的通信不会被窃听或篡改。 首先,我们要了解SSH的基本工作原理。SSH通过公钥基础设施(Public Key Infrastructure, PKI)来实现安全连接。用户在本地计算机...

    C#通过SSH访问RDS服务器上的MySQL数据库

    2. **建立SSH连接**: 使用SSH.NET,你需要创建一个`SshClient`对象并提供RDS服务器的IP地址、用户名和密码。然后,通过调用`Connect()`方法建立连接。 ```csharp using Renci.SshNet; SshClient sshClient = new ...

    使用SSH方式远程连接Git服务器.pdf

    Git是一种强大的分布式版本控制系统,它的...同时,SSH公钥的管理也使得你可以方便地在不同的Git服务器之间切换,而无需重新设置密码。对于团队协作和大型项目管理来说,使用Git配合SSH连接远程仓库是最佳实践之一。

    SSH整合Ajax实现注册验证

    在这个场景下,Ajax用于在客户端验证用户输入,如检查用户名是否已存在,这样可以在提交前就给出反馈,减少不必要的服务器交互。 5. **JSON**:在实际的SSH整合Ajax应用中,数据交换格式通常是JSON而非XML,因为...

    Linux系统ssh无密码登录设置手册.docx

    SSH客户端和服务器通过网络通信,客户端使用私钥解密由服务器发送的挑战,服务器验证成功后允许登录。 7 安全注意事项 - 定期更换密钥 - 限制SSH端口以增加安全性 - 使用防火墙规则限制SSH访问来源 - 避免在公共...

    SSH Secure Shell服务器Linux连接

    SSH Secure Shell服务器在Linux环境中是必备的工具,它允许管理员和其他用户通过命令行界面执行各种操作,如文件传输、系统管理任务等,而无需暴露敏感信息。 SSH协议的核心功能包括身份验证和加密。身份验证通常...

    SSH工作原理及流程

    SSH 协议基于客户端/服务器架构,客户端和服务器端之间通过加密的连接进行通信。客户端发起连接请求,服务器端响应连接请求,并进行身份验证和密钥交换。身份验证可以使用用户名和密码、公钥认证、智能卡等方式。...

    sshshell.zip

    它使用公钥加密技术来验证服务器身份,并为通信双方创建一个加密的隧道,确保数据传输的安全性。SSH的主要优势在于其安全性,比传统的FTP(File Transfer Protocol)更安全,因为FTP通常在明文中传输数据,容易受到...

    部署SSH 搭建安全的服务器管理平台

    2. **连接设置**:使用修改过的端口号连接SSH服务器,确保公钥已正确配置,以实现无密码登录。 3. **使用SSH客户端**:通过图形界面或命令行进行远程管理,如执行命令、传输文件等。 ### 安全策略: 1. **限制并发...

    ssh远程登录的秘钥验证设置.docx

    SSH(Secure Shell)是一种安全的网络协议,用于在不安全的网络环境中提供加密的通信渠道。它主要用于远程登录,但也支持其他网络服务,如文件传输。SSH 的主要优点在于其安全性,它能防止数据在传输过程中被窃取或...

Global site tag (gtag.js) - Google Analytics