`
zhoutaomtv
  • 浏览: 11939 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在Windows和Linux上连接SSH遇到Key文件格式不对

阅读更多
在Windows管理Linux服务器时,常使用putty登陆ssh进行远程管理。
但如果你是使用Linux来连接SSH服务器时,putty就没法用了。
通常现在的Linux发行版都使用OpenSSH代替telnet、rsh等明文传输的终端服务。
以Ubuntu 10.04来说:
toddy@ubuntu:~/.ssh$ ssh -v
OpenSSH_5.3p1 Debian-3ubuntu4, OpenSSL 0.9.8k 25 Mar 2009
usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-e escape_char] [-F configfile]
           [-i identity_file] [-L [bind_address:]port:host:hostport]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-R [bind_address:]port:host:hostport] [-S ctl_path]
           [-w local_tun[:remote_tun]] [user@]hostname [command]


一、为什么要使用SSH连接
   传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。

二、SSH的安全验证是如何工作的
  从客户端来看,SSH提供两种级别的安全验证。
  第一种级别(基于口令的安全验证)只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密, 但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器, 也就是受到“中间人”这种方式的攻击。
  第二种级别(基于密匙的安全验证)需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。 如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后, 先在你在该服务器的家目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致, 服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。 客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
  用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
  第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。 但是整个登录的过程可能需要10秒。

三、连接
使用第一种连接方式虽然简单,但在实际工作中由于不安全而用得很少。所以我们现在主要来看第二种连接方式。关于SSH服务器的配置网上可以找到大量的参考资料,这里我就不多说了。我这里主要说一下我在连接过程中遇到的问题。
1.分清密钥文件的格式
PuTTY采用的是*.ppk文件格式,里面的编码方式我就不是很清楚了
OpenSSH 使用的就是 OpenSSH 格式,因为其为脱离ssh的最早的SSH软件
ssh secure shell client 使用的是 IETF SECSH 格式

2.在Windows上使用
windows下使用putty远程连接,因为putty不能识别直接从服务器拷贝来的私钥,那么还需要下载一个工具将私钥的格式转化为putty使用
的格式。
工具名称:puttygen.exe
格式转换
1)、打开工具puttygen.exe --> Conversions --> Import Key
2)、选择从拷贝过来的私钥文件id_rsa
3)、Save private key 名字随便 例如ftpserver.ppk
测试:打开工具putty.exe
1)、Session --> Host Name (填写服务器地址或者域名)
2)、Connection --> SSH --> Auth (点Browse选择刚才经过格式转换的ftpserver.ppk)
3)、open

2.在Linux环境上使用
由于我们一般不会在Linux上使用Putty工具,因为一般Linux上都带有OpenSSH工具,我们可以直接使用这个client去连接。由于项目组里的授权文件都是windows下的*.ppk文件,当然无法直接使用,需要转换为openssh格式的文件
可以使用puttygen工具Load,它除了可以Load其本身格式的私钥外(.ppk),还可直接Load其他格式的私钥,并能自动识别以及可以转换成PuTTY格式密钥,比如OpenSSH的私钥
导出成功后,我在linux下使用openssh连接
ssh -l root xxx.xxx.xxx.xxx -i key_file

经过了上面这么多,问题的关键归结于几种格式的转换:
1. IETF SECSH -------------------------> OpenSSH
用OpenSSH的 ssh-keygen: $ ssh-keygen -i -f privatekey > newprivatekey

2. OpenSSH ----------------------------> IETF SECSH
用OpenSSH的 ssh-keygen: $ ssh-keygen -e -f privatekey > newprivatekey
用ssh2的 ssh-keygen2: $ ssh-keygen -x privatekey

3. PuTTY格式的转换:
使用puttygen.exe
3.1 其他两种格式 -----------------------> PuTTY格式
除了可以Load其本身格式的私钥外(.ppk),还可直接Load其他格式的私钥,并能自动识别以及可以转换成PuTTY格式密钥,比如OpenSSH的私钥
3.2 也可将PuTTY格式 --------------------> 其他两种格式

经过几天不断实验,终于弄清楚了其中关系
分享到:
评论

相关推荐

    python连接ssh 远程操作linux命令行

    Python SSH库,如Paramiko和ssh模块,是用于在Windows环境下连接到Linux服务器并执行远程命令的强大工具。本文将深入探讨如何使用Python实现这一功能,以及它可以带来的各种可能性。 首先,`Paramiko`是一个实现...

    winscp,putty(ssh) 等连接ubuntu 需安装ssh服务.docx

    总结起来,要在Windows上使用WinSCP和PuTTY(SSH)连接到Ubuntu,你需要: 1. 在Ubuntu上安装`openssh-server`。 2. 生成SSH密钥对。 3. 启动SSH服务。 4. 获取Ubuntu的IP地址。 5. 使用WinSCP和PuTTY配置连接参数并...

    Linux平台转接——FlashFXP

    FlashFXP是一款在Windows操作系统上广泛使用的FTP(文件传输协议)客户端工具,它提供了便捷的文件上传、下载和管理功能。然而,标题“Linux平台转接——FlashFXP”表明了我们将讨论如何在Linux环境中利用FlashFXP...

    SSH配置和经常出现的报错以及解决方法

    根据提供的文件信息,可以看出这里似乎混入了一些与SSH配置无关的内容,主要涉及Struts框架的配置及遇到的一些问题。为了遵循题目要求,我们将重点放在SSH配置及其常见错误处理上。 ### SSH配置 #### 什么是SSH? ...

    win10内置Linux运用python进行远程连接

    要启用 Win10 内置 Linux,需要在系统的“程序和功能”中开启“适用于 Linux 的 Windows 子系统”。同时,需要在系统的“设置”中开启“开发者选项”,以便在 PowerShell 中启用 Bash。 二、安装 Bash 在 ...

    Windows上SSH服务器配置图文教程

    总结以上步骤,配置Windows上的SSH服务器包括下载安装freeSSHd软件、开启SSH服务、添加和配置用户、设置认证方式以及在客户端进行相应的配置。完成这些步骤后,Windows服务器将可以接受SSH连接,用户也可以通过SSH...

    新手教学系列-SSH基础使用教程

    - 在MAC/Linux系统中开启SSH Agent:编辑`~/.ssh/config`文件,添加以下内容: ``` Host * AddKeysToAgent yes ForwardAgent yes ``` - 在Windows系统中(以XShell为例)开启SSH Agent:通过命令`ssh-agent`...

    pietty远程登入工具

    2. **多平台支持**:尽管其名称中的“TTY”暗示了终端仿真,PiTTY实际上是跨平台的,可在Windows操作系统上运行,连接到各种类型的操作系统,如Linux、Unix等。 3. **可配置性**:用户可以根据自己的需求自定义设置...

    公网访问局域网Linux

    通过以上步骤,我们可以轻松地实现在公网上对局域网内的Linux系统进行远程访问。这对于需要经常进行远程操作的用户来说非常有用。此外,使用Holer这样的工具还能够提高数据传输的安全性,因为它通过加密通道传输数据...

    WinSCP-5.11.2.7781-Setup.exe+PuTTY_0.67.0.0.exe

    在Windows操作系统中,我们经常会遇到需要连接到Linux服务器或其他远程主机进行管理的情况。这时,WinSCP和PuTTY两款开源工具就显得尤为重要。本文将详细介绍这两款工具的功能、使用方法以及它们在Windows环境下的...

    Visual Studio 2017通过SSH调试Linux上.NET Core

    它让开发者能够在Windows环境中充分利用Visual Studio的强大功能,同时在Linux上测试和调试.NET Core应用,从而提高了开发的灵活性和生产力。这个功能对于那些在不同操作系统之间切换的开发者来说,无疑是一个巨大的...

    使用cygwin 运行启动autossh服务

    Cygwin模拟了Linux或Unix环境,使得可以在Windows上运行许多原本只适用于Linux的应用程序,包括SSH服务。 **什么是Autossh?** Autossh是一款实用工具,设计用于监控SSH连接并自动恢复因网络问题中断的连接。这对于...

    AWS连接指南1

    1. 在下载的私钥文件上执行`chmod 400 vskedserver1key.pem`,确保只有所有者可以读取,以增强安全性。 2. 私钥文件不应具有可写或执行权限,这是防止未经授权访问的重要步骤。 **连接到实例:** 1. 找到实例的公共...

    解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题

    通过这种方式,我们可以确保`nohup`命令在远程服务器上正常工作,即使在断开SSH连接后,后台任务仍然会继续运行。这种方法适用于那些需要长时间运行或者不受用户会话影响的进程。 总结一下,解决Python paramiko...

    python2.7 paramiko安装包

    Paramiko是Python中一个强大的SSH(Secure SHell)协议库,用于实现客户端和服务器之间的安全远程通信。在Python 2.7版本中,有时可能会遇到使用`pip`安装库时出现的问题,比如网络不稳定、镜像问题或者依赖冲突等。...

    Windows 用 使用 Gogs 建 搭建 Git

    Gogs(Go Git Service)是一款开源的轻量级 Git 服务,它使用 Go 语言编写,易于部署,可在 Windows、Linux 和 macOS 上运行。对于希望在私有环境中搭建 Git 仓库的企业或个人来说,Gogs 是一个很好的选择。本文将...

    putty

    PuTTY 提供了一个简单易用的图形界面,使得在Windows系统上操作远程Linux服务器变得非常便捷。 PuTTY 的核心功能: 1. **SSH连接**:PuTTY 支持SSH1和SSH2协议,提供了安全的远程登录方式。SSH协议可以确保用户的...

    git与Eclipse的整合

    2. **生成SSH Key**:可以通过命令行工具(例如Windows下的CMD或Mac/Linux下的Terminal)执行以下命令来生成新的SSH Key对: ```bash ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ``` 这个命令将会...

    putty之pscp命令详解.docx

    它与Linux下的scp命令类似,但适用于Windows环境,并且通过SSH协议进行安全的数据传输。pscp支持多种选项,使得用户能够更加灵活地管理和传输文件。 #### 二、pscp命令基本语法 pscp的基本语法格式如下: ```...

Global site tag (gtag.js) - Google Analytics