1. 什么是SSH
SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。SSH是每一台Linux电脑的标准配置,但是在windows系统中默认是没有安装SSH的,需要安装SSH相关服务端软件,比如FreeSSHD。
2. SSH可以用来做什么
SSH可以用于远程登录主机,登录方式通常有两种:口令登录和公钥登录
一:口令登录:通过在服务端设定的用户名和密码进行登录,每次都登录都需要填写密码
二:公钥登录:通过一对公钥和私钥登录,公钥存放在服务端私钥存放在客户端,在登录时服务端向客户端发生一个随机字符串,然后客户端通过私钥先进行加密然后发生到服务端,在服务端接受和用公钥进行解密,然后匹配是否正确解密来验证登录,注意:存在在服务端的公钥名称和用户名一致,已区分不同用户不同的公钥;这样每次就可以直接用公钥登录省去了密码的繁琐。
SSH可以用户服务端和客户端之间双向文件传输
3. SharpSSH与SSH服务端FreeSSHD
SharpSSH是一个用C#实现的SSH客户端组件,用户可以根据需要修改使用改组件已满足自己的需求,SharpSSH介绍和组件下载网站:http://sharpssh2.codeplex.com/,也可以在这里下载。
注意:在官网下载SharpSSH会因为主机为安装Mono而出现Mono.Security.dll的引用错误,只需要下载Mono.Security.dll重新引用即可。
我在Windows7 VS2012的环境下测试官网下载的SharpSSH项目升级成功,解决方案如下:
其中有两个项目:Examples,SharpSSH顾名思义,Examples是使用示例,SharpSSH就是真正的实现项目,设置Examples为启动项,运行效果如下:
可以看到,示例为我们提供了16个功能项,再次我们需要测试远程登录和文件传输,使用第13, 和16项测试即可,同时也会用到第5项生成公钥私钥对;
客户端SharpSSH已经实现了,接下来在Windows系统中就需要安装客户端了,这里选择FreeSSHD作为客户端,官网下载地址:http://www.freesshd.com/?ctt=download或这里:http://download.csdn.net/detail/dangercheng/6804861
下载下来直接下一步下一步安装,安装完成后运行会提示你是否生成Key选择是即可,同时会安装FreeSSHDService服务,选择关闭该服务;
此时可以看到支持telnet和SSH服务,且都关闭,到此步客户端服务端都已经准备就绪,下面就进行我们的登录测试和文件传输测试吧;
4. 远程登录执行命令
上面提过,登录有两种方式,口令登录和公钥登录,先介绍口令登录吧;
口令登录:即在服务端freeSSHd上创建一个用户名和密码,使用此密码口令登录
首先在freeSSHd上的Users选项中点击Add弹出添加用户界面,然后Login填写用户名,authorization选择Password stored as SHA1 hash 然后填写密码和重复密码,勾选该用户可用服务,如下图,创建了用户名和密码都是test:
然后我们选择SSH项,将Use new console engine项的勾选去掉已防止中午乱码,如图:
选择确定即可创建成功,然后回到主界面我们打开SSH服务
如上图所示即表示SSH服务已经成功开启;但是有可能会错误:常见原因是地址已使用,这是端口号22已经被使用造成的,关闭该端口的进程即可。
接下来我们运行我们的sharpSSH进行登录测试吧。
我们选择第13项,然后输入远程地址I(由于服务端就在本机所以是127.0.0.1),然后不选择公钥登录,然后输入密码,连接成功,执行date命令查询当前时间:
现在我们测试公钥登录:
公钥登录需要先生成公钥私钥对,我们选择第5项KeyGen来生成,命名为test(和用户名一致),Sig Type选择dsa, 然后Comment为空弹出窗口输入passphrase我们不输入直接选择ok,这样就在sharpSSH的bin\Debug目录下生成了我们的test的公钥私钥两个文件。如图:
生成了公钥test.pub和私钥test两个文件。然后将公钥文件test.pub放到freeSSHd指定的公钥文件夹目录:
也就是C:\Program Files\freeSSHd\这个目录下,并去掉后缀.pub,然后修改test用户的authorization选择Public Key如图:
接下来再测试:
5. 传输文件
首先我们修改服务端文件位置:
这样我们服务端的默认位置就是我们在freeSSHd下面自己添加的sftpFile的目录了,我们在里面放一个图片test.jpg,现在我们要将这个图片传到我们sharpSSH的目录页就是bin\Debug目录下并改名为testClient.jpg:
可以看见传输的速度还是很快的93k0秒完成,有兴趣的可以试试大文件的传输,到此关于SSH的登录和文件传输的测试完毕,当然SSH还有其他的很多很多的强大功能,这里不能一一列举测试,有兴趣自己取试试。