一、SSH是什么?
SSH(SecureShell)是目前比较可靠的为远程登录会话和其他网络服务提供安全性的协议。
利用SSH协议可以有效防止远程管理过程中的信息泄露问题。通过SSH,可以把所有传输的数据进行加密,
也能够防止DNS欺骗和IP欺骗。下面介绍的是Ubuntu中SSH的概念和使用的方法,具体内容如下所述。
SSH的英文全称是SecureSHell,SSH协议族由IETF(InternetEngineeringTaskForce)的NetworkWorkingGroup制定,SSH协议的内容SSH协议是建立在应用层和传输层基础上的安全协议。通过使用SSH,你可以把所有传输的数据进行加密,这样”中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。
传统的网络服务程序,如FTP、Pop和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。
SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、Pop、甚至为PPP提供一个安全的”通道”。
最初SSH是由芬兰的一家公司开发的。但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件,而且是免费的,可以预计将来会有越来越多的人使用它而不是SSH。SSH是由客户端和服务端的软件组成的。SSH安装容易、使用简单,而且比较常见,一般的Unix系统、Linux系统、FreeBSD系统都附带有支持SSH的应用程序包。
二、SSH用法
1、登陆远程主机
命令格式: ssh username@hostIp 或者 ssh hostIp -l username
其中 username代表远程主机的某个用户的登陆用户名,hostIp代表远程主机的IP地址 。
第二个命令的-l 代表登陆的含义 ,参数指定为登录的用户名。
例如:ssh [email protected] 或 ssh 10.57.18.10 -l testagent2 执行命令后输入用户名的密码,则可以进入远程主机。
2、连接到远程主机指定的端口
命令格式: ssh username@hostIp -p 端口号 或者 ssh hostIp -l username -p 端口号。
例如:ssh [email protected] -p 2222 或 ssh 10.57.18.10 -l testagent2 -p 2222
使用场景:当把某个远程暴漏给外网可以ssh访问时,通常需要在路由里做端口映射,我们不会把22端口直接映射出去,而是转换成其他端口号, 这时就需要使用-p 端口号命令格式,不指定端口时,默认连接的就是22端口。
3、通过远程主机1跳到远程主机2
命令格式: ssh -t remoteserver1 ssh remoteserver2
说明:当远程主机remoteserver2无法直接到达时,可以使用-t参数,然后由remoteserver1跳转到remoteserver2。
在此过程中要先输入remoteserver1的密码,然后再输入remoteserver2的密码,然后就可以操作remoteserver2了。
4、通过SSH运行远程shell命令:
命令格式: ssh -l name remoteserver ‘command’
说明:连接到远程主机,并执行远程主机的command命令,命令执行完后退出远程主机终端。
例如:ssh 10.57.18.10 -l testagent2 ls -l or ssh [email protected] ls -l 列出远程终端的目录。
5、修改SSH监听端口
默认情况下,SSH监听连接端口22,攻击者使用端口扫描软件就可以看到主机是否运行有SSH服务,将SSH端口修改为大于1024的端口是一个明智的选择,
因为大多数端口扫描软件(包括nmap)默认情况都不扫描高位端口。
修改方法:
1、 打开/etc/ssh/sshd_config文件并查找下面这样的行: # Port
2、 去掉该行前面的# 号,然后修改端口号并重新启动SSH务: /etc/init.d/ssh restart
6、仅允许SSH协议版本2:
有两个SSH协议版本,仅使用SSH协议版本2会更安全,SSH协议版本1有安全问 题,包括中间人攻击(man-in-the-middle)和注入(insertion)攻击。
修改方法:
1、 编辑/etc/ssh/sshd_config文件并查找下面这样的行: #Protocol 2,1
2、修改为 Protocol 2
7、禁止root用户登录:
通常情况下,不采用直接用root用户登录到远程主机,由于root用户拥有超级权限,这样会带来安全隐患,所以,一般我们用普通用户登录,当需要管理远程主机时,再切换到root用户下。
修改方法:
1、打开/etc/ssh/sshd_config文件并查找下面这样的行: #PermitRootLogin yes
2、将#号去掉,然后将yes修改成no,重启ssh服务,这样就可以禁止root用户登录。
8、设置登录时提示信息
1、首先编辑一个文件,如bannertest.txt,文件内容自行定义。
2、然后打开/etc/ssh/sshd_config文件并查找下面这样的行: #Banner /some/path
3、将#号去掉,然后将bannertest.txt文件的全路径替换/some/path,然后保存,重启ssh服务。
当客户端登录时,就会看到bannertest.txt文件中的提示信息。
9、进行端口映射:
假如公司内网有台web服务器,但是只对内不对外,这样,外网就无法访问,可以用ssh进行端口映射来实现外网访问内网的web服务器。假如web服务器名为webserver,webserver可以用ssh访问到远端主机remoteserver,登录到webserver,然后用下面命令进行映射
命令格式:
ssh -R 3000:localhost:80 remoteserver
执行完成后,在remoteserver机器上,执行netstat -an|grep 3000,查看有没有开通3000端口。并执行以下命令观察是否可以打开webserver上的网页
$ w3m http://127.0.0.1:3000
如果能打开界面,说明映射成功.但是,这只限于本机访问web服务器,即只能remoteserver机器访问webserver。因为3000端口绑定的是remoteserver机器的127.0.0.1端口。可以编辑remoteserver机器上的/etc/ssh/sshd_config文件并添加如下内容:
添加 GatewayPorts yes 内容,把监听端口3000绑定到 0.0.0.0 地址上,这样外部的所有机器都能访问到这个监听端口,然后保存退出。并重启ssh服务。完成后其它机器就可以在浏览器中输入 http://remoteserver:3000来访问webserver了。
10、scp命令:
scp命令是SSH中最方便有用的命令,可以在两台服务器之间传送文件。并且在传输过程中仍是使用ssh加密的。
命令如下:
1、将远程主机的/tmp/test 文件复制到本地的/bak文件夹下
scp [email protected]:/tmp/test /bak 输入远程主机用户密码即可。
2、 将本地/bak/1234 文件复制到远程主机的/tmp文件夹下
scp /bak/1234 [email protected]:/tmp 输入远程主机用户密码即可。
标记红色的用法是用的比较多的。ssh还有很多其他用法,例如sftp等,这里不在讲述,有兴趣可以从网上查些资料
本文出自 “厚德载物” 博客,谢绝转载!