早在学习Linux之前,就有听说过ssh这个词了,当时因为学了j2ee的三大框架,所以当听到ssh时,我立马想到的是struts + spring + hibernate,当时也在想这不是java的东西么?怎么跟Linux扯上关系了???后面在百度一下ssh以后,才发现此ssh并非咱们常说的那三大框架的总称,而是一种安全协议,Secure Shell的缩写。。。看来自己的墨水还是太少了。。。还有太多东西要去学习啊。。。。
SSH(Secure Shell的缩写),由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。咱们传统的远程网络服务如ftp、telnet等在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。当如果出现第三方假冒服务器来接收到咱们发送过去的明文数据时,此时可能就会发生严重问题。但是如果通过使用SSH,你可以把所有传输的数据进行加密,这样恶意用户的这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP甚至为PPP提供一个安全的"通道"。
ssh协议目前有SSH1和SSH2,SSH2协议兼容SSH1。目前实现SSH1和SSH2协议的主要软件有OpenSSH和SSH Communications Security Corporation 公司的SSH Communications 软件。前者是OpenBSD组织开发的一款免费的SSH软件,后者是商业软件,因此在linux、FreeBSD、OpenBSD、NetBSD等免费类UNIX系统种,通畅都使用OpenSSH作为SSH协议的实现软件。
咱们现在安装的Linux版本,都会装有SSH,默认就是OpenSSH,可以通过 ssh -V 命令来查看安装的ssh版本信息:
[root@xiaoluo xiaoluo]# ssh -V OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
从上述信息可以看到,我这台安装在虚拟机上的CentOS6.4默认安装的SSH其协议是1.0的。
那么我们有了SSH,我们可以做什么呢?为什么说Linux程序员必须要学会使用SSH呢?
在没有SSH之前,咱们如果想要在Linux和Windows操作系统上实现文件的共享,无非是通过挂载光驱到Linux系统上,或者是通过安装Samba服务器(Linux学习之CentOS(十一)--CentOS6.4下Samba服务器的安装与配置)来进行文件的共享,如果要实现文件的上传下载,那就还要安装FTP才行,这样做起来就非常的麻烦。比如说我Linux系统是远端的一个服务器,咱们这边有许多的程序员在编程完以后需要将文件都上传到Linux系统上,但是我又不能让每个用户都实际的登陆到远端的Linux服务器上,这时我们怎么办呢?那就通过使用咱们的ssh就可以解决问题,ssh类似于咱们windows操作系统上的telnet程序,可以远程登录到远端的服务器,在通过ssh登陆到了远端的Linux服务器以后,咱们就相当于实际登陆了Linux系统一样,可以对其进行操作,同时文件上传、下载、这些都可以非常轻松的搞定,可以说,在学习SSH之前,Ftp、Samba这些咱们是要必须掌握的,但是在学习了SSH以后,这些服务器都是浮云了。。。。。。。
咱们Linux系统在安装时都会安装好了ssh服务器,刚才我们通过了 ssh -V 这个命令可以查看到我们系统上安装的ssh服务器版本信息,所以我们不需要再安装ssh服务端了,在Linux系统中,ssh服务器的服务名称是 sshd ,我们可以通过 chkconfig --list | grep sshd 命令来查看一下sshd服务的开机启动情况
[root@xiaoluo xiaoluo]# chkconfig --list | grep sshd sshd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
默认情况下,Linux系统在启动时,sshd服务就会启动,咱们不需要去改变它。因为ssh也是一种网络服务,所以其必然也绑定了一个端口号,在Linux系统中,ssh服务绑定的端口号是 21 ,咱们可以通过 netstat -anp | grep sshd 命令来查看sshd服务绑定的端口号是多少:
[root@xiaoluo xiaoluo]# netstat -anp | grep sshd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2140/sshd
因为Linux上安装的是ssh服务端,所以咱们如果希望通过远程访问的方式登录到这台服务器上,比如我要在windows系统上远程登录到ssh上,咱们就得在windows上安装一个ssh客户端,现在的ssh客户端软件都非常多,大家可以选择一个下载,例如有:
Absolute Telnet (http://www.celestialsoftware.net/)
putty (http://www.putty.org/)
Xshell4 (http://www.netsarang.com/products/xsh_overview.html)
这里我使用的是Absolute Telnet这个ssh客户端。
注意:在使用ssh登陆到远程的Linux系统上时,首先必须要保证该主机要能够与Linux系统之间能互相 ping 通,否则ssh是无法建立远程连接的
打开我们的Absolute Telnet客户端,进入到了主界面
在界面敲入回车键或者,选择 文件 -> 连接 就可以弹出连接框
在这个框里我们可以设置这次远程访问的一些属性,比如背景色、字符编码、字体等,点击 连接 选项就可以进入到连接信息填入界面
在这里我们要输入我们需要远程登录的Linux系统的ip地址(通过ifconfig 命令就可以查看),然后点击确定
在这个界面我们选择登录的方式,这里选择使用密码登陆,然后填入我们想要登陆到远程Linux上的用户名和密码(注意:如果是第一次以该用户登录,则会提示生成一个密钥,咱们点击确定即可)
这时我们发现我们已经通过root账号登陆到了远程的Linux系统上,这里的操作完全和在Linux系统上的终端操作一模一样。我们这时可以通过 top 命令来查看此时登陆到该Linux系统上的用户:
我们发现已经登录了三个用户(因为我的虚拟机上的Linux系统上登陆了xiaoluo和root用户了,所以刚通过ssh再次登录root账号就是第三个用户)
我们此时当然可以通过再次运行 Absolute Telnet客户端再次登录一个用户,为什么Linux系统是多用户的操作系统呢?就是体现在这上面,在Linux上我们可以登陆多个用户对其系统进行访问。
文件上传、下载以及文件的共享????在ssh上就更方便了
咱们点击那个SFTP按钮,然后进入到了文件上传的界面(注意:我用的这个Absolute Telnet的客户端软件,如果要进行文件上传,那么建立连接时必须要以root账户登陆,否则在上传文件时会提示权限不足)
没错,左边就是你的Windows操作系统目录结构,右边就是你的Linux操作系统目录结构,想要从Windows上上传文件到Linux上?或者从Linux上上传东西到Windows上?so easy。。。直接选择文件然后拖拽过去即可!!!!!此时我们进入到对应的目录,文件已然在目录下了。。。。。。所以说,为什么每一个Linux程序员都得学会ssh。。。。有了ssh,samba那些服务器都是浮云,都可以抛弃了。。。。。。。。。。。
今天终于领悟到了ssh所带来的好处了!!!!!!!!!!!!!!!!!!!
这篇随笔主要记录了对ssh的一些初步认识,在以后的Linux学习中将继续记录自己的学习心得!!!
本文转自sandshell博客51CTO博客,原文链接http://blog.51cto.com/sandshell/1947757如需转载请自行联系原作者
sandshell