因为项目计算量比较大,需要将任务分布到多台电脑上面运行,因为对于分布式概念不熟,就想到了linux最简单的ssh协议,远程控制其他电脑,然后写shell脚本统一在所有电脑上运行程序.(我的操作系统为Ubuntu16.04)
首先在各自电脑上面输入以下命令查看是否安装了ssh
ps -e | grep ssh
如果返回结果由上图中的sshd,则说明已经安装好ssh,否则线安装.
sudo apt-get install ssh 安装即可.
接下来我们使用ssh登录其他电脑的时候,ssh username@ip登录,会提示需要输入密码.这时候输入密码即可远程控制另一台电脑.
(ifconfig查看ip)
如果有十台电脑需要你连接,分配任务,这样做就要每次都记住相应的电脑ip和密码,不利于我们用脚本统一运行,因此第一步就是需要将需要远程控制的电脑免密登录.
首先我们在你自己的电脑上面生成密钥.
ssh-keygen,然后一路enter,此时会在主目录下生成.ssh的文件夹
ls -a (查看是否生成.ssh文件夹)
进入.ssh文件夹,查看文件
此时说明秘钥对已经生成好了.接下来将公钥通过scp拷贝到你需要连接的电脑上.
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
scp ~/.ssh/id_rsa.pub username@ip:~/.ssh/id_rsa.pub_copy
接下来远程连接上你需要连接作为服务器的电脑
touch ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub_copy >> ~/.ssh/authorized_keys
这时候就到了最后一步,修改权限
chmod 755 ~
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
这里很多人不太明白755,700,600这些数据的含义,这个是linux权限的数字表达方式.
给大家说明一下,比如我们在查看某个文件的权限时
我们会看到上面的结果,前面这一部分是由十位组成,1-3-3-3的方式,第一个字母表示文件类型,d表示的就是文件夹document的第一个字母,接下来第一个三位表示所有者的权限,第二个三位是所在组的权限,第三个三位是其他组的权限.R--读,W-写,X-执行,所以rwx表示当前组可读可写可执行.回到上面数字,R同时对应数字4,W对应2,X对应1.现在可以明白755表示所有者是可读可写可执行,所在组是可写可执行,其他组也是可写可执行.
好啦,现在可以测试一下是否可以免密码登录他人电脑了.
在运行过程中,你可能会遇到这个问题,这是表明ssh-agent在运行,但是没有找到相应的key,我们通过ssh-add,即可解决,同时也可以通过ssh-add -l来查看附加的key.
在远程连接中还是需要输入用户名和ip,如果你不想输入用户名,就在最初为所有的电脑创建一个相同的用户即可.
脚本运行所有程序
Screen -dm ssh -t username1@ip1 “...” (在引号里面输入你想运行的命令即可)
Screen -dm ssh -t username2@ip2 “...”
ps:写得不好的地方希望大家多多指教.