定义
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
功能
传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道" 。
安全
从客户端来看,SSH提供两种级别的安全验证。
第一种级别(基于口令的安全验证)
- 只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
第二种级别(基于密匙的安全验证)
- 需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。
- 如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
具体应用场景
本地操作直接shell登陆处理,那远程操作就需要ssh,ssh提供加密验证和传输,提高通信的安全程度。
C端(Client客户端)
每一个客户端需要生成一个对密钥:
$ ssh-keygen -t rsa
$ > passphrase: <passwd> # used when decrypt privatekey on connecting to server
$ ssh-copy-id -i ~/.ssh/id_rsa.pub myname@www.server.com
在~/.ssh下生成私钥id_rsa和公钥id_rsa.pub,
同时将公钥传给sshd服务器www.server.com, 存放于服务器的~/.ssh/authorized_keys文件中,每行一个授权客户;
配置连接不同服务器使用不同的账号和密钥:
$ cat ~/.ssh/config
host server1
user name1
hostname ip1
port 22
identityfile ~/.ssh/id_rsa1
host server2
user name2
hostname ip2
port 23
identityfile ~/.ssh/id_rsa2
$ ssh server1
$ ssh server2
S端(Server服务端)
在服务器添加访问账户:name1:passwd1
在/etc/ssh/sshd_config配置登录选项和密钥位置,允许ssh登录的用户
AllowUsers name1
PermitRootLogin no
StrictModes no
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no
配置好以后, 重启一下服务
# after modify sshd_config, restart sshd
$ /etc/init.d/ssh restart
客户端登录
使用SSH连接登录
$ ssh name1@<server1>
[name1@server1]$
$ ssh name1@<server1> "echo connected >> log/ssh.log"
$ ssh -i ~/.ssh/id_rsa2 name2@<server2>
$ ssh server2
使用SFTP连接登录
-
定义:
- sftp是SSH File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多。
sftp常用命令:
ls 查看当前目录下文件
help 查看sftp支持哪些命令
cd 指定目录
pwd 查看当前目录
get xxx.txt 下载xxx文件
put xxx.txt 上传xxx文件
quit / bye / exit 退出sftp
sftp xxx.xxx.xxx.xxx 登录root用户
sftp zygf@xxx.xxx.xxx.xxx 进行登录zygf用户
sftp server1 登录config里面配置的目标地址, 用户先关信息都在config里面