安全Shell(ssh)是最通用的系统管理工具之一,它接受远程访问,并允许登录远程系统并在其上执行命令,安全性上利用强大的加密技术和主机秘钥来防止网络嗅探
声明:本文演示的全部操作所使用的系统32位redhat5.8
软件安装:openssh
#yum install openssh -y -->请事先自行配置好yum源
openssh-client-4.3p2-82.el5.i386
openssh-4.3p2-82.el5.i386
openssh-server-4.3p2-82.el5.i386
启动服务
#/etc/init.d/sshd start
远程登录
ex:
#ssh 192.168.122.188 -->默认以root账户登录192.168.122.188主机
#ssh [email protected] -->以指定账户user1登录192.168.122.188主机
#ssh -p 8189 192.168.122.188 -->以指定端口8189登录192.168.122.188主机
当第一次ssh远程登录主机(以192.168.122.199为例),出现的提示可能如下样式:
#ssh 192.168.122.199
The authenticity of host '192.168.122.199 (192.168.122.199)' can't be established.
RSA key fingerprint is 2b:df:85:8d:13:92:6d:57:65:ac:d3:11:ff:dd:71:f9.
Are you sure you want to continue connecting (yes/no)?yes
-->这里只有输入完整的yes才有效
Warning: Permanently added '192.168.122.199' (RSA) to the list of known hosts.
[email protected]'s password: -->输入登录密码
Last login: Mon Oct 28 20:56:49 2013 from 192.168.122.1
[root@localhost ~]#
小贴士:-X 选项
ex:
ssh -X 192.168.122.199
--> -X选项可使远程主机上的程序在本地桌面环境下显示图形界面,这样不仅带来了便利,而且也为本地主机与远程主机之间的通信通道提供了保护
远程拷贝
-->语法格式中,相对于当前的位置,谁是远程主机,就在谁的前面加IP
ex:
#scp ./a.txt 192.168.122.199:/root/tmp -->拷贝当前目录下的a.txt文件
#scp -r 192.168.122.199:/root/usr/src /tmp -->拷贝目录
说明:参数要跟在命令后,不能放在后面会被误认为文件报错
安全性:使用私钥-公钥进行身份验证
秘钥由服务主机生成,私钥主机自己妥善保管,公钥可以发送给任何终端主机
拥有SSH服务器公钥的主机可以发布仅可以存在私钥的服务主机才能够解答的测试,因此可以根据所持有的秘钥进行验证,验证成功,则每次在访问系统的时候可不必键入密码,而安全性仍能得到保证
使用ssh-keygen命令生成秘钥
#ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
-->秘钥存放的位置,默认在/root/.ssh/id_rsa文件中
Enter passphrase (empty for no passphrase): marmotc
--> 加密秘钥,直接回车不进行加密
Enter same passphrase again: marmotc
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
5d:2f:0a:5f:12:a1:e4:77:44:9b:c8:e2:5d:36:f9:55 [email protected]
说明:在生成秘钥期间,将提供用于指定密码的选项,若设置了该项,在使用时必须提供所设密码才能访问私钥,否则私钥无法使用,通过此方法,可以拖延在秘钥被盗时,攻击者使用秘钥的时间,在攻击者破解并使用私钥前,可以生成新的秘钥并删除所有涉及旧秘钥的内容
默认秘钥存储在家目录的.ssh/目录下
#ls ~/.ssh/
id_rsa id_rsa.pub known_hosts
可以使用ssh-copy-id命令将公钥复制到目标主机(以192.168.122.199主机的user1用户为例)
#ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
[email protected]'s password:
Now try logging into the machine, with "ssh '[email protected]'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
或者以手动模式复制公钥到目标主机:将id_rsa.pub拷贝到目的主机/root/.ssh/目录下,并改名为authorized_keys,若该文件已存在,则追加进该文件里面即可
SSH案例应用:端口转发
SSH会自动加密和解密所有SSH客户端与服务器端之间的网络数据,与此同时,SSH还提供了一个非常实用的功能:端口转发,能够将其他TCP端口的网络数据通过SSH链接来转发,并且自动提供了相应的加密及解密服务,这一过程有时也被叫做“隧道”(tunneling),这是因为SSH为其他TCP链接提供了一个安全的通道来进行传输而得名。如Telnet、SMTP、LDAP这些TCP应用均能从中受益,避免了用户名、密码以及隐私信息的明文传输;另外,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,那么也是能够通过将TCP端口转发来使用SSH进行通讯
总体而言,SSH端口转发能够提供两大功能:
1.加密SSH Client端至SSH Server端之间的通讯数据
2.突破防火墙的限制完成一些之前无法建立的TCP连接
拓扑结构:
********** .............. ************** ............... **************
* Client * <------------> * SSH Server * <-------------> * WEB Server *
********** .............. ************** ............... **************
1.1.1.1/24 ````` 1.1.1.254/24 `````` 172.16.1.254/24 ```` 192.16.1.1/24
语法:
ssh -L <local port>:<remote host>:<remote port> <SSH servername>
本案例中的应用:
ssh -g -L 80:172.16.1.1:80 1.1.1.254
参数说明:没有指定-g的情况下,80这个端口只接受本机的连接,指定-g参数SSH Server的80端口可以接受其他主机的连接
WEB Server IP:172.16.1.1/24
#cat /var/www/html/index.html
html test
Client IP:1.1.1.1/24
#elinks --dump http://1.1.1.254
html test