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

转载 2015年11月20日 17:17:29

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:-.}; }

相关文章推荐

Telnet和SSH(ssh1,ssh2)间区别

 一、TELNET 使用Telnet这个用来访问远程计算机的TCP/IP协议以控制你的网络设备相当于在离开某个建筑时大喊你的用户名和口令。很快会有人进行监听,并且他们会利用你安全意识的...

jenkins git client plugin拉取代码时间太久导致报错

报错内容:fatal: The remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed解决方法: 在 je...

浅谈 Linux 下的 SSH1, SSH2

SSH:Secure Shell 。是一种安全协议。 常见的应用场景是远程控制台登陆。 SSH1免费,SSH2收费。  其实 SSH 并不只是在 Linux 和 Unix  下使用,他们同样在 Win...
  • cnmm22
  • cnmm22
  • 2015-04-05 14:37
  • 3491

jenkins 视图正则匹配分类

在jenkins中新建一个视图,编辑视图找到正则配置页面例如,我的正则表达式为 dev-zjb-.*那么我将可以自动匹配到的项目为:

python random模块学习笔记

Python中的random模块用于生成随机数,下面是random的一些使用方式导入random模块import random一、choice()# choice() 随机获取一个值 # 从0-9中随...

SSH2免密码登录OpenSSH

1. 如何确定是OpenSSH还是SSH2? 执行命令“ssh -V”,通过它的输出,即可确定: SSH2 ssh: SSH Secure Shell 3.2.9.1 (...

两个SSH2间免密码登录

以下针对的是ssh2,而不是ssh,也不是OpenSSH。配置分两部分:一是对登录机的配置,二是对被登录机的配置,其中登录机为客户端,被登录机为服务端,也就是解决客户端到服务端的无密码登录问题。下述涉...

Hadoop全分布集群搭建(2)——SSH免密码登陆

Hadoop全分布集群搭建SSH免密码登陆 为所有节点设立用户hadoop Master节点免密登录 生成并上传公钥 Mster与Slave节点之间免密登录Hadoop全分布集群搭建——SSH免密码登...

Ubuntu13.04安装SSH,以及配置多台电脑之间无密码登陆

本章讲述的是在ubuntu13.04中如何安装SSH已经配置,多台电脑之间的无密码登录 1.安装SSH 在ubuntu13.04的终端中输入:sudo apt-get install ssh 根据提示...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)