一.SSH简介
转载自:https://blog.csdn.net/u013452337/article/details/80847113
1.SSH简介
简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。这里只讨论SSH在Linux Shell中的用法。如果要在Windows系统中使用SSH,会用到另一种软件PuTTY,这需要另文介绍。
SSH由客户端和服务端的软件组成,在客户端可以使用的软件有SecureCRT、putty、Xshell等,
而在服务器端运行的是一个sshd的服务,通过使用SSH,可以把所有传输的数据进行加密,而且也能够
防止dns和IP欺骗,此外,SSH传输的数据是经过压缩的,可以加快传输速度
中间人攻击
SSH之所以能够保证安全,原因在于它采用了公钥加密。
整个过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。
可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。
2.ssh的安装
注意:当删除centos容器的时候,ssh也会被删除
SSH分客户端openssh-client和openssh-server
如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则sudoapt-get install openssh-client),如果要使本机开放SSH服务就需要安装openssh-server。
Ubuntu缺省已经安装了ssh client。
libssh是一个提供ssh相关接口的开源库,包含服务端、客户端等
1.检查Linux系统是否安装了openssh-server
[root@437170924b5a /]# yum list installed | grep openssh-server
#若什么也没有输出,则表示没有安装过openssh-server,我们需要安装
2.安装openssh-server,让其他主机可以连接此主机
[root@437170924b5a /]# yum install openssh-server
3.要求输入的,输入Y即可
3.修改配置为文件
找到/etc/ssh/目录下的sshd服务配置文件 sshd_config,用Vim编辑器打开
取消注释(去掉#)Post 22、PermitRootLogin(开启远程登陆) PasswordAuthentication(开启使用密码作为连接远征)
4.启动ssh
service sshd start
5.查看是否已启动ssh
[root@centos]# ps -e | grep sshd
或者
[root@centos]# netstat -an | grep 22
6.修改当前用户(root)的密码
二.Docker的网络模式
1.docker的四种网络模式
Docker自身的4种网络工作方式,和一些自定义网络模式
安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host
host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
Container:创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。
None:该模式关闭了容器的网络功能。
Bridge:此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。
以上都是不用动手的,真正需要配置的是自定义网络。
要注意Docker是有IP地址的,其实Docker的网络模板有点类似我们平常使用虚拟机的host-only模式,容器和宿主机组成一个独立的局域网,宿主机的IP为172.17.0.1,对应主机的网络名称为docker0,
显示所有容器IP地址:
docker inspect --format='{{.Name}} - {{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
显示指定容器的IP地址
docker inspect 容器ID | grep IPAddress
2.docker的桥接模式Bridge
当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。接下来就要为容器分配IP了,Docker会从RFC1918所定义的私有IP网段中,选择一个和宿主机不同的IP地址和子网分配给docker0,连接到docker0的容器就从这个子网中选择一个未占用的IP使用。如一般Docker会使用172.17.0.0/16这个网段,并将172.17.0.1/16分配给docker0网桥(在主机上使用ifconfig命令是可以看到docker0的,可以认为它是网桥的管理接口,在宿主机上作为一块虚拟网卡使用)。单机环境下的网络拓扑如下,主机地址为10.10.0.186/24。
三.远程SSH连接docker当中的centos容器
docker run --name=centos -it --net=bridge -p 6868:22 -d 镜像id /bin/bash
service ssh start
#-p 6868:22 ,将docker的6868端口和容器的22端口绑定,这样通过访问docker的6868端口,就可以神奇的访问到容器的22端口!!!!!
1.使用iterm2连接远程linux主机
ssh ssh root@127.0.0.1 -p 6868
注意这里由于docker使用的硬件就是宿主机的硬件,所以IP是127.0.0.1,我们想要连接centos时,采用的时docker的IP,也就是127.0.0.1,不是centos的ip,
我们访问docker的IP的时候,通过端口的射就会访问到centos
2.遇到的问题:Warning: Permanently added '[127.0.0.1]:6868' (RSA) to the list of known hosts. Connection closed by...
解决办法:
1.进入到centos容器当中,修改/etc/ssh/sshd-config文件
PermitRootLogin no修改为yes
AuthorizedKeysFile .ssh/authorized_keys前面加上#屏蔽掉
PasswordAuthentication no修改为yes
PubkeyAuthentication yes修改为no