现在的位置: 首页 > 综合 > 正文

SFTP安全传输 客户端 + 服务器 搭建

2018年07月27日 ⁄ 综合 ⁄ 共 5489字 ⁄ 字号 评论关闭

转自:http://blog.csdn.net/liujiaqiid/article/details/4519582

===================概念性问题==============================

=======putty
  随着Linux在服务器端应用的普及,Linux系统管理越来越依赖于远程。在各种远程登录工具中,Putty是出色的工具之一。
  Putty是一个免费的、Windows 32平台下的telnet、rlogin和ssh客户端,但是功能丝毫不逊色于商业的telnet类工具。

      ===

      用它来远程管理Linux十分好用,其主要优点如下: 
  ◆ 完全免费;
  ◆ 在Windows 9x/NT/2000下运行的都非常好;
  ◆ 全面支持ssh1和ssh2
  ◆ 绿色软件,无需安装,下载后在桌面建个快捷方式即可使用;
  ◆ 体积很小,仅364KB (0.54 beta版本);
  ◆ 操作简单,所有的操作都在一个控制面板中实现。

=======ssh
       ssh是我最常用的远程连接协议,因为ssh本身连接使用加密的数据隧道,即便有人监听,也无法获得我们所在通讯的内容。ssh协议包括一个服务器端和客户端。一般来说,现在的Linux都带有open ssh :

   可以担当ftp数据传输功能

   可以完美的转发X数据流

   可以套接在其他的协议之上,从而为其他的加密 
使用ssh可以避免使用密码,虽然我们可以记住自己的密码,同时把登录密码设得很长,达到一定的安全性。但是有了ssh我们还可以选择

保管自己的密钥,而不是记住自己的密码,或者记一个短一些的密码。putty里面为这个功能提供的产生密钥的工具是 puttygen.exe,对应命令ssh-keygen,可以生成DSA和RSA密钥,这个自己选择好了。产生密钥之后可以附加一个使用密钥的密码,如果不要,那就自己保管好自己的私钥了。putty产生的密钥有个小毛病,就是没有用户名,而ssh-keygen可以产生相应用户名,这使得putty不得不让我们多输入一行字——自己的用户名。产生的密钥是一对,公钥和私钥。

公钥可以上传到远端服务器上面,如openssh是在~/.ssh/authorized_keys,append到文件最后即可生效,而私钥就是通信的时候自己持有的密钥了。所以私钥一定要自己保管好。

  SSH的英文全称是Secure SHell。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的“通道”。

  最初SSH是由芬兰的一家公司开发的。但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件,而且是免费的,可以预计将来会有越来越多的人使用它而不是SSH。

  SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。 

=======cypwin

      cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用gnu工具集在windows上进行嵌入式系统开发,非常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对cygwin产生了兴趣。
  cygnus当初首先把gcc,gdb,gas等开发工具进行了改进,使他们能够生成并解释win32的目标文件。然后,他们要把这些工具移植到windows平台上去。一种方案是基于win32 api对这些工具的源代码进行大幅修改,这样做显然需要大量工作。因此,他们采取了一种不同的方法——他们写了一个共享库(就是cygwin dll),把win32 api中没有的unix风格的调用(如fork,spawn,signals,select,sockets等)封装在里面,也就是说,他们基于win32 api写了一个unix系统库的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起,就可以使用unix主机上的交叉编译器来生成可以在windows平台上运行的工具集。以这些移植到windows平台上的开发工具为基础,cygnus又逐步把其他的工具(几乎不需要对源代码进行修改,只需要修改他们的配置脚本)软件移植到windows上来。这样,在windows平台上运行bash和开发工具、用户工具,感觉好像在unix上工作。
         Cygwin包括两部分,一是cygwin1.dll文件,它作为一个Linux API仿真器层为各Linux应用程序提供各种Linux下的系统调用。另一部分包括一系列Linux下的常用工具包,这些工具包是用l这些工具的源码针对Cygwin环境重庆编译而成。需要注

意的是Cygwin并不能让原生Linux程序在windows下直接运行,如果你想让一个Linux应用程序在windows下运行,你将不得不将应用程序从源代码重新编译。
=====openssh

 OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。它用安全、加密的网络连接工具代替了 telnet、ftp、 rlogin、rsh 和 rcp 工具。OpenSSH 支持 SSH 协议的版本 1.3、1.5、和 2。自从 OpenSSH 的版本2.9以来,默认的协议是版本2,该协议默认使用 RSA 钥匙。OpenSSH 2.x同时支持SSH 1.x和2.x。

==========psftp

PSFTP是PuTTY SFTP客户端,用于本地与服务器间安全传输文件(使用SSH连接)。

具体可查询http://blog.csdn.net/liujiaqiid/archive/2009/09/04/4519938.aspx

==========sftp
     一般来说两台机器间的文件传输,除了常用的ftp以外,还可以通过scp/sftp协议(就是本文介绍的sftp)进行。下面我们就来看看sftp协议与ftp协议之间的差别。

    (1)和ftp不同的是sftp/scp传输协议默认是采用加密方式来传输数据的,scp/sftp确保传输的一切数据都是加密的。而ftp一般来说允许明文传输,当然现在也有带SSL的加密ftp,有些服务器软件也可以设置成“只允许加密连接”,但是毕竟不是默认设置需要我们手工调整,而且很多用户都会忽略这个设置。

    (2)普通ftp仅使用端口21作为命令传输。由服务器和客户端协商另外一个随机端口来进行数据传送。在pasv模式下,服务器端需要侦听另一个口。假如服务器在路由器或者防火墙后面,端口映射会比较麻烦,因为无法提前知道数据端口编号,无法映射。(现在的ftp服务器大都支持限制数据端口随机取值范围,一定程度上解决这个问题,但仍然要映射21号以及一个数据端口范围,还有些服务器通过UPnP协议与路由器协商动态映射,但比较少见)

    (3)当你的网络中还有一些unix系统的机器时,在它们上面自带了scp等客户端,不用再安装其它软件来实现传输目的。

    (4)scp/sftp属于开源协议,我们可以免费使用不像FTP那样使用上存在安全或版权问题。所有scp/sftp传输软件(服务器端和客户端)均免费并开源,方便我们开发各种扩展插件和应用组件。


====================环境搭建=======================
1-------------------下载程序
     服务器端我们使用openssh,它自带了cygwin环境以及scp/sftp的服务器(sftp是ssh的一个“子服务”,在ssh通道中使用某个命令在需要时激活)。 http://sourceforge.net/   是一个和好的开源网站, 可搜索openssh
for windows最新版本下载.

    客户端可采用winscp软件,他是一款图形化界面的软件,界面操作类似于ftp软件,很好上手。我们到 http://sourceforge.net/ 下即可.  也可采用psftp软件,是命令行格式。
(以上软件也可到此下载:  http://download.csdn.net/source/1664899        http://download.csdn.net/source/1662977
2-------------------安装
    服务器端安装很简单,就像其它windows下的软件一样,双击即可。安装到大半,会有提示框弹出,说“必须要设置../etc/passwd文件才可以正常运作openssh,详情可以参阅readme.txt或quickstart.txt文件。”不用管它,按确定继续完成安装。安装完后可以看到quickstart.txt文件的内容。大体步骤如下:

 第一步:将之前下载的sftp服务端解压缩,然后直接运行主程序。点“NEXT”按钮进行下面的操作。

 

 1

 第二步

 

 

 第三步:在接下来的配置窗口中选择要安装的组件,从界面中我们可以看到包括client(客户端)与server(服务器端),实际上我们只需要服务器端,而客户端我们使用之前下载的WinSCP 3.8.2即可。选择相应的服务器端组件后点“下一步”按钮继续。

 

第四步:选择程序安装的路径,默认是c:/program files/openssh,建议大家不修改这个缺省地址。

 

第五步:

5

 

客户端winscp或psftp可直接运行:

 

       

打开winscp:

 

 

3------------------配置 
     第一、打开一个ms-dos终端,进入openssh/bin目录。(安装完openssh后,发现多了几个在linux中常用的命令,如:ls、mkdir、rm、chmod、chown等)
     第二、将计算机上的组导入group文件中。这里分两种情况,第一种是本地,第二种是在域中。分别运行-l和-d参数。如果想将两种组都导入,可以先运行-l的参数再运行-d参数的命令。 
下面是原文: 
Use mkgroup to create a group permissions file. For local groups, use the "-l" switch. For domain groups, use the "-d" switch. 
     For both domain and local, it is best to run the command twice (remember to use >>, not >). If you use both, make sure to edit the file to remove any duplicate entires. 

       mkgroup -l >> ../etc/group        这是加入本地组的命令。 
       mkgroup -d >> ../etc/group       这是加入域组的命令。 

     第三、将计算机的用户与其密码导入passwd文件中。与上面的组一样,也是分本地和域两种情况。如果没有该文件或没有导入用户的信息。作为server的话,将不能被登陆,因为没有用户嘛! 
下面是原文: 
Use mkpasswd to add authorized users into the passwd file. For local users, use the "-l" switch. For domain users, use the "-d" switch. 
     For both domain and local, it is best to run the command twice (remember to use >>, not >). If you use both, make sure to edit the file to remove any duplicate entires. 

       mkpasswd -l [-u <username>] >> ../etc/passwd       这是加入本地用户的命令。 
       mkpasswd -d [-u <username>] >> ../etc/passwd       这是加入域用户的命令。
 

     NOTE: To add users from a domain that is not the primary domain of the machine, add the domain name after the user name. 
     NOTE: Ommitting the username switch adds ALL users from the machine or domain, including service accounts and the Guest account. 
4--------------启动openssh server 

       net start opensshd 

很明显,停止opensshd服务的命令就是: 
   
     net stop opensshd

=============================

抱歉!评论已关闭.