ssh 和 ssh2 之间的 转换
每次都输入密码会很烦,而且也不安全,同时还有其他一些潜在的风险,所以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的问题出现如下错误:
上述情况发生的场景一般是openssh作为client,要连接一个ssh2都server, 如果上述两种解决方案都觉得麻烦的话,可以通过tar来绕过这个问题:
ssh 和 ssh2 之间的 转换相关推荐
- 各种格式SSH 公钥和私钥之间的转换
前天给客户安装环境,没想到在生成SSH密钥上耽误很多时间. 先从一个实验开始吧. 先生成密钥对,公钥为/tmp/key.pub,私钥为/tmp/key.命令行选项中 -t表示key type,-b表示 ...
- 时间不同单位之间的转换
在观察仿真波形的时候,经常会出现微妙,毫秒,皮秒之间的转换,出现过错误,每次记不清楚的时候还要重新查资料,现总结如下. 秒(second)是国际单位制中时间的基本单位,符号是s.有时也会借用英文缩写标 ...
- java类型转换面试题_JavaSE:数据类型之间的转换(附常见面试题)
数据类型之间的转换 分为以下几种情况: 1)低级到高级的自动类型转换: 2)高级到低级的强制类型转换(会导致溢出或丢失精度): 3)基本类型向类类型转换: 4)基本类型向字符串的转换: 5)类类型向字 ...
- java 嵌套对象转xml_Gson对Java嵌套对象和JSON字符串之间的转换 | 学步园
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,具有良好的跨平台特性.近几年来已经和XML一样成为C/S架构中广泛采用的数据格式.有关JSON的更多知识, ...
- ROS与PCL中点云数据之间的转换
此为文章初稿还没有完善,应该还有一些问题,等待后面有时间再继续更新,原创文章,未经允许,请勿转载!!! 首先介绍在PCL库中经常使用的两种点云之间的转换,这里将根据工程中的经验,从代码层面举例分析如何 ...
- 日期与unix时间戳之间的转换C++实现
之前在https://blog.csdn.net/fengbingchun/article/details/107023645 中介绍过gmtime和localtime的区别,这里介绍下日期与Unix ...
- java怎么改变数据类型_java数据类型之间的转换,是怎么回事啊? - 收获啦
1.数据类型的分类 2.比较数据类型之间的字节大小 1字节=8位 . 3.转换中的知识点 *java中整数类型默认的int类型:小数类型默认的double: *String的字符串转化为char类型时 ...
- java字符串与基本数据_java --字符串与基本数据类型之间的转换
public static void main(String[] args) { /** * 1.字符串与基本数据类型之间的转换 * 字符串-->基本数据类型,调用xx.parseXxx(Str ...
- csv文件与字典,列表等之间的转换小结【Python】
本文针对前面利用Python 所做的一次数据匹配实验,整理了其中的一些对于csv文件的读写操作和常用的Python'数据结构'(如字典和列表)之间的转换 (Python Version 2.7) cs ...
最新文章
- 树莓派Android Things物联网开发:创建一个Things项目
- linux ssh Unused,ssh免密码登录 - leopardlinux的个人空间 - OSCHINA - 中文开源技术交流社区...
- ngx_lua_API 指令详解(一)ngx.timer.at 指令
- 什么样 信号_深圳停止商务公寓用地审批释放着什么样的信号,会引起房价下跌吗...
- Ubuntu 下一个 vim 建立python 周围环境 构造
- 解决Can't connect to MySQL server on 'localhost' (10048)
- 利用Linq在RadCombobox中输出分类后的数据
- RTCPeerConnection.onicecandidate属性
- n条直线相交最多有几个邻补角_【初中数学】102条做初中几何辅导线的规律
- Python判断一个集合族是否为σ代数
- SpringCloud 实战:禁止直接访问后端服务
- vue slot的使用介绍
- 安装dhcp服务方法(系统为linux 7.0)
- 理解委托的两类必要方法
- wordpress不登陆后台禁用插件
- 配置docker加速器
- linux oracle 强制覆盖_赤兔Oracle数据库恢复软件下载-赤兔Oracle数据库恢复软件v11.6免费版...
- CentOs网络管理:ifconfig家族,iproute家族及配置文件
- Java程序的编辑、编译、运行
- 使用Latex画三线表时出现线条宽度不一致的情况