`

ssh和ssh2之间的免密码登陆详解

阅读更多

http://blog.chinaunix.net/uid-26517277-id-4055228.html

 

SSH为Secure Shell的缩写,由IETF的网络工作小组(Network Working Group)所制定;SSH为创建在应用层和传输层基础上的安全协议。在维基百科上,有关于SSH的详细词条,但通俗点说,SSH能够让一个客户端安全的登录上一个服务器上进行管理操作。所以,忘掉FTP、POP和Telnet吧,专心来爱SSH。

让我们从最基础的部分开始,首先假定我们有台Macbook,然后想登录上一台Ubuntu服务器进行管理操作,那么首先要求Ubuntu服务器上 安装了SSH服务。SSH服务最早是由芬兰的一家公司开发,现在已经发展到SSH2版本,但由于版权和加密算法等因素的影响,很多人开始转用 OpenSSH,听这名字,就知道它是开源和免费的。

以下所有操作都需要具备root权限的账号,通常我们不太建议在服务器上直接登录为root,所以一般会登录为普通用户,然后通过在命令前面加上sudo来获取root权限。

1.我们先惯例一下

sudo apt-get update sudo apt-get upgrade

2.然后开始安装OpenSSH服务

sudo apt-get install openssh-server

3.Ubuntu会帮我们解决一切依赖关系问题并且安装好OpenSSH服务,接下来可以做一些配置来实现更快更安全的目的具体的修改可以参见这里

至此安装已经结束了,下面我们可以从Macbook上登录试试,假设Ubuntu上存在一个用户tester。在Macbook上选择应用程序 – 实用工具 – 终端,然后在打开的终端里面输入

#注意这里S_IP是服务器的真实IP地址 ssh tester@S_IP

然后就会问你test的密码,输入密码就可以成功登录进行操作了。

每次都输入密码会很烦,而且也不安全,同时还有其他一些潜在的风险,所以SSH也提供基于密钥的认证机制,你必须为自己创建一对密钥,并把公钥放在 需要访问的服务器上。客户端软件会向服务器发出请求,请求用你的私匙进行安全验证。服务器收到请求之后,先在你在该服务器的用户根目录下寻找你的公钥,然 后把它和你发送过来的公钥进行比较。如果两个密钥一致,服务器就用公有密钥加密“质询”(challenge)并把它发送给客户端软件。从而避免被“中间 人”攻击。

由于之前所说的原因,会出现一种蛋疼的情况,有些公司还喜欢使用SSH2版本的SSH服务,SSH2和OpenSSH的加密算法是完全不一样的,他们所使用的的密钥对也不兼容,所以会出现下面4种组合
1. OpenSSH客户端对OpenSSH服务器
2. SSH2客户端对SSH2服务器
3. OpenSSH客户端对SSH2服务器
4. SSH2客户端对OpenSSH服务器
假设客户端C试图使用用户tester登录服务器S,我们来看看各种组合下如何使用密钥登录

1. OpenSSH客户端对OpenSSH服务器,这是最简单和最常见的情况
首先在C上操作

ssh-keygen -t rsa

生成的私钥保存在~/.ssh/id_rsa,注意私钥一定要是这个名字,除非你更改C的ssh客户端配置,然后将公钥id_rsa.pub上传到S上去

#这里S_IP是服务器的真实IP,并假定用户tester的主目录是/home/tester scp ~/.ssh/id_rsa.pub tester@S_IP:/home/tester/.ssh/

然后在服务器S上做如下操作

cd /home/tester/.ssh cat id_rsa.pub >> authorized_keys

退出服务器S,然后从C上重新登录一下

ssh tester@S_IP

不出意外,你再也不用输入密码了。

2. SSH2客户端对SSH2服务器
这种情况也很简单,因为SSH2版本的ssh服务已经有了个新的工具ssh-keygen2。
首先在C上操作

ssh-keygen2 -t rsa

注意,这将会在C上当前用户的目录的这个位置~/.ssh2/生成一对密钥id_rsa_2048_a和id_rsa_2048_a.pub
你必须在~/.ssh2/目录下建立一个文件identification,并通过它来指定私钥

cd ~/.ssh2/ vi identification #输入如下内容 IdKey id_rsa_2048_a #保存修改

然后将公钥id_rsa_2048_a.pub传到服务器S上去

#这里S_IP是服务器的真实IP,并假定用户tester的主目录是/home/tester scp ~/.ssh2/id_rsa_2048_a.pub tester@S_IP:/home/tester/.ssh2/

然后在服务器S上做如下操作

cd /home/tester/.ssh2 vi authorization #在里面新增一行 Key id_rsa_2048_a.pub #保存修改

退出服务器S,然后从C上重新登录一下

ssh tester@S_IP

不出意外,这能够工作了。

3. OpenSSH客户端对SSH2服务器
这种情况是最复杂的一种,网络上很多的免密码登录SSH的文章都没有涉及到这种,下面具体介绍一下应该如何配置
首先在C上操作

ssh-keygen -t rsa

生成的私钥保存在~/.ssh/id_rsa,注意私钥一定要是这个名字,除非你更改C的ssh客户端配置,然后你需要做一件事情,就是将公钥转换成为SSH2所兼容的模式,使用以下的指令

cd ~/.ssh/ ssh-keygen -e -f id_rsa.pub > id_rsa_2.pub

然后将公钥id_rsa_2.pub上传到S上去

#这里S_IP是服务器的真实IP,并假定用户tester的主目录是/home/tester scp ~/.ssh2/id_rsa_2.pub tester@S_IP:/home/tester/.ssh2/

然后在服务器S上做如下操作

cd /home/tester/.ssh2 vi authorization #在里面新增一行 Key id_rsa_2.pub #保存修改

退出服务器S,然后从C上重新登录一下

ssh tester@S_IP

不出意外,这能够工作了。

4. SSH2客户端对OpenSSH服务器
这种情况是最蛋疼的,应该非常少见吧?这意味你将用一台商业授权的服务器去管理一台开源的服务器?希望你的工作不用这么纠结,虽然这种情况的配置是非常简单的,基本和1一致,因为SSH2原生也支持SSH1,所以就请大家参见1的配置了。

如果了解完了上面所说的一切,包括引用链接,你就完全够将SSH应用到工作的各个方面的,下面还会稍微透露一下,平时可能需要了解到的一些秘籍

1.SSH2密钥和OpenSSH密钥的相互转换。

#OpenSSH转SSH2 ssh-keygen -e -f OpenSSH.pub > SSH2.pub #SSH2转OpenSSH2 ssh-keygen -i -f SSH2.pub > SSH2.pub

2.平时如果我们在Windows环境下,通常会使用SecureCRT,XShell以及Putty等优秀的SSH客户端软件,它们可以让SSH 的工作变得更轻松,但如果在Mac或者Linux环境下,命令行的SSH操作则更自然,那么你知道在命令行下的SSH如何使用代理嘛,当需要的时候?
下面以OpenSSH客户端为例,假设有两个服务器S1和S2,需要通过一个代理服务器P1的80端口才能够连接。

vi ~/.ssh/config #修改如下内容 Host S1_IP S2_IP     ProxyCommand nc -X connect -x P1:80 %h %p     ServerAliveInterval 60

此外,在使用scp都时候还有可能因为ssh和ssh2的问题出现如下错误:
"scp - FATAL: Executing ssh1 in compatibility mode failed (check that scp1 is in your PATH)." Quote 1: This problem is often quite perplexing, since a ssh -V trace may show that you're using SSH-2 - so what is a message about "ssh1 compatibility mode " doing in there? What's happening is this: 1. On the OpenSSH client, you run say, scp foo server:bar 2. scp runs ssh in a subprocess to connnect to the server, and run the remote command scp -t bar. This is intend to start an instance of the scp program on the server, and the two scp's will cooperate by speaking over the SSH connection, to retrieve the file. 3. ssh connects to the server (using either protocol 1 or 2, it doesn't matter), and runs the remote scp command. However, the "scp" that gets run on the server is the SSH2 scp program (scp2), not the OpenSSH one. The crux of the problem is: besides the name, these two scp's have exactly nothing in common. scp2 cannot speak the file-transfer protocol that OpenSSH scp does. However, scp2 recognizes from the "-t" flag what's expected, and tries exec scp1 to service the connection (this is the extent of SSH2's SSH-1 compatibility; where OpenSSH has code for both protocols in a single set of programs, SSH2 expects to execute programs from a parallel SSH1 installation). It fails (presumably because you don't have SSH1 installed), and reports the problem. The solution is to install either the OpenSSH or SSH1 version of scp on the server under the name "scp1", somewhere in the sshd2's PATH. Quote 2: OpenSSH implements "scp" via RCP over an SSH channel. ssh.com implement "scp" via FTP over an SSH channel. OpenSSH's server has both implementations, but it's client only uses the RCP version. So if the client is OpenSSH, use "sftp" to get to an ssh.com server.
上述情况发生的场景一般是openssh作为client,要连接一个ssh2都server,
如果上述两种解决方案都觉得麻烦的话,可以通过tar来绕过这个问题:
scp2() { tar cf - -C $(dirname $1) $(basename $1) | ssh user_name@server_ip -- "tar xmf - -C $2" } scp2r () { ssh user_name@server_ip -- "tar cf - -C $(dirname $1) $(basename $1)" | tar xmf - -C ${2:-.}; }
分享到:
评论

相关推荐

    详解SSH如何配置key免密码登录

    ### SSH Key 免密码登录详解 #### 一、SSH Key 的基本概念与原理 SSH(Secure Shell)是一种网络协议,用于计算机之间的加密登录。通过SSH,可以在非安全的网络环境中提供安全的远程登录服务,其安全性主要依靠...

    SSH2免密码登录OpenSSH

    ### SSH2与OpenSSH免密码登录详解 #### 一、确定SSH版本 为了明确当前使用的SSH版本是SSH2还是OpenSSH,可以通过简单的命令行来判断。执行`ssh -V`命令,根据输出的信息来确定: - **SSH2**: 如果显示为`SSH ...

    两个SSH2间免密码登录

    本文详细介绍了SSH2环境下实现客户端和服务端之间免密码登录的具体步骤。通过这些步骤,不仅可以提高工作效率,还能确保数据的安全传输。值得注意的是,本教程的操作环境为SuSE 10.1,因此在其他操作系统上执行时...

    Linux配置ssh免密码登录

    ### Linux配置SSH免密码登录详解 #### 一、引言 在进行分布式系统如Hadoop集群的搭建过程中,为了提高效率并确保数据的安全性,通常需要实现节点间的免密码登录。这种方式通过使用SSH (Secure Shell) 的公钥/私钥...

    ssh免密码登录

    ### SSH免密码登录详解 #### 一、简介 在日常运维工作中,经常需要在多台服务器之间进行频繁的SSH连接操作。为了提高工作效率并减少密码输入的繁琐过程,实现SSH免密码登录是一种非常实用的方法。本文将详细介绍...

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

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

    OpenSSH登录SSH2

    ### OpenSSH与SSH2的关系及免密码登录配置详解 #### 一、OpenSSH与SSH2简介 SSH(Secure Shell)是一种网络协议,用于计算机之间的加密登录。SSH2是SSH协议的第二个版本,提供了更安全的数据传输方式。OpenSSH是...

    ssh1或ssh2的有关配置和说明项详解

    2. **配置增强**:SSH2的配置文件(服务器端和客户端)同样包含更多安全选项,如禁用密码登录、限制公钥算法、设置最大会话超时等。 3. **SSH2整合**:在开发环境中,SSH2常用于Java的SSH框架,如Spring Security ...

    ssh免密码登陆

    ### SSH免密码登录详解 #### 一、引言 SSH(Secure Shell)是一种网络协议,用于计算机之间的加密登录。在日常运维工作中,我们经常会遇到需要频繁登录其他服务器的情况,这时如果能够实现SSH免密码登录,将极大地...

    ssh框架搭建详解与登录实例

    总的来说,"ssh框架搭建详解与登录实例"涵盖了Java Web开发中的许多关键知识点,包括框架集成、数据库操作、MVC设计模式、用户认证等。通过实践这个实例,开发者能够深入理解SSH框架的工作原理,并提升企业级应用...

    SSH2_libSSH2_libSSH2_lib

    SSH2_libSSH2_libSSH2_lib 这个标题和描述可能指的是libSSH2库的二次开发或者使用场景,libSSH2是一个开源的C语言库,它实现了SSH2协议,用于安全地远程执行命令、传输文件和其他数据。SSH(Secure Shell)是一种...

    ssh命令详解和例子

    ### SSH命令详解与实例 SSH(Secure Shell)是一种网络协议,用于操作远程计算机上的服务,提供了安全的登录、文件传输及执行远程命令的功能。本文将深入解析SSH的基础命令及其应用场景,帮助读者更好地理解和掌握...

    ssh远程多机免密码的方法

    在IT领域,尤其是对于运维工程师、系统管理员和开发人员来说,实现SSH远程多机免密码登录是一项极其重要的技能。这种能力不仅可以提高工作效率,减少重复的手动输入密码动作,还能增强自动化部署、监控和管理的可行...

    详解SSH框架和Redis的整合

    SSH框架指的是Struts、Spring和Hibernate三个开源项目的组合,它们分别负责表现层、控制层和持久层,是Java Web开发中常用的三大框架。而Redis是一种高性能的键值存储系统,常用于缓存数据,提高应用性能。 整合SSH...

    ubuntu下ssh配置详解

    Ubuntu 下 SSH 配置详解 在 Linux 的 Ubuntu 版本下,配置 SSH 服务是一件非常重要的事情。SSH(Secure Shell)是一种安全的远程登录协议,可以实现远程登录到服务器上。下面将详细介绍在 Ubuntu 下配置 SSH 服务的...

    ssh协议详解(汇总)

    ssh协议详解ssh协议详解ssh协议详解ssh协议详解

    bash脚本中将密码传递给ssh/scp命令方法详解

    请注意,为了实现无密码登录,确保目标主机B的`.ssh`目录和`authorized_keys`文件的权限设置正确,一般应该是`700`和`644`分别对应目录和文件。 总结来说,通过使用`sshpass`或密钥对认证,可以在bash脚本中自动化...

Global site tag (gtag.js) - Google Analytics