当宿主中的多台虚拟机之间都能够互相ping通之后,下一步需要进行的是相互之间建立稳定的连接,从而能够相互的传输数据。假设宿主机器为A,两台虚拟机为B和C,并且两台虚拟机都是通过桥接的方式进行联网的。
1.打开所有主机的ssh服务
先查看是否存在ssh服务:
sudo /usr/sbin/ssd #若提示错误,则证明没有安装ssh
sudo apt install openssh-server #进行ssh的安装
sudo /usr/sbin/sshd #打开ssh服务
ps -e |grep sshd #查看是否在运行sshd服务
2.有密码的连接主机
当三台host的ssh服务都打开之后,下一步是需要进行相互连接,相互连接就简单了,假设A中的用户为john,B中的用户为host1,C中的用户为host2,A的IP为:192.168.110.47,,B的IP为192.168.110.51,C的IP为192.168.110.11,通过指令:
ssh host1@192.168.110.51 #默认端口为22
输入B中host1的密码即可,就完成了连接。其它的两台机器的相互连接也是一样的。
3.免密码的连接主机
有些时候为了方便,希望主机之间能够免密的连接,而不需要知道连接主机的密码,这个时候就需要用到ssh的免密连接了,事实上是把当前主机的公钥存储在需要连接到主机的授权文件中即可。指令如下:
ssh-keygen -t rsa #一直enter就ok了,这是生成秘钥
ssh-copy-id host1@192.168.110.51 #把本机的公钥发送到主机B的host11中
在发送公钥中,只需要输入host1的密码即可。然后再次远程连接一下host1,就会发现不需要密码。
如果要让B中的host1也免密远程登入A的话,也需要把host1的公钥发送给A,是一个相互的过程。若要把其他主机加入的话,也是一样的操作。
4.文件的传输
打算用Python的库函数paramikp来进行文件的传输,paramikp这个库函数还是很好用的,只需要按照流程依样画葫芦就可以了,如我要把源主机中的一个test.txt文件传送到一个目的主机中,代码如下:
import paramiko
if __name__ == "__main__":
remote_host = '192.168.1.104'
ssh_port = 22
user_name = 'client1' #传输到的目的主机中的用户名
# 加载RSA私钥
private_key_file = '/home/john/.ssh/id_rsa' #因为传输的文件是在john用户下
key = paramiko.RSAKey.from_private_key_file(private_key_file)
# 上传文件到远程主机
t = paramiko.Transport((remote_host, ssh_port))
t.connect(username=user_name, pkey=key)
sftp = paramiko.SFTPClient.from_transport(t)
# 上传当前目录下的文件到远程主机的/root/目录下
# 也可以直接指定绝对路径
sftp.put("Documents/test.txt", "Documents/test.txt")
t.close()
在源主机上运行该代码之后,即可在目的主机用户的Documents下看到test.txt文件,一个简单的文件传输就完成了。当然,之后需要进行的工作是如何完成动态的把客户端的数据传输到对应的工作站端,再把工作站计算完的结果传输给相应的客户端,这是一个动态的过程,后续再进行完善。
5.测试多个客户端到服务器的信道参数
使用iperf该命令来测试,iperf需要同时运行在客户端和服务器端。
在服务器端运行:
iperf -s -D -P 3 -L 5001
-s代表服务器,-D代表守护进程,-P代表可以监听的客户端数目,-L代表监听的端口。未使用-u时代表是TCP包
在客户端运行:
iperf -u -b 1000M -t 30 -i 1 -p 5001 -c 192.168.1.104
-b代表设置的带宽, -t 传输数据的时间,-i 生成报告的时间间隔, -p监听的端口,-c 需要连接的远端服务器IP地址。
如果需要把测试得到的数据存储到文本中,可以使用数据重定向(>> file name)的功能,或者参数-o来指定输出文档。
客户端输出的部分结果如下:
Client connecting to 192.168.1.104, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.1.135 port 51242 connected with 192.168.1.104 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 3.25 MBytes 27.3 Mbits/sec
[ 3] 0.0- 1.2 sec 3.38 MBytes 22.8 Mbits/sec