当项目计算量比较大,我们需要将任务分布到多台电脑上面运行,因为对于分布式概念不熟,就想到了Linux最简单的ssh协议,远程控制其他电脑,然后写shell脚本统一在所有电脑上运行程序。
简单说,SSH是一种网络协议,用于计算机之间的加密登录。
如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。
最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
需要指出的是,SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。
下面我们以Ubuntu 16.04为例子看看使用ssh有哪些步骤:
1
在电脑中输入以下命令查看是否安装了ssh:
—ps -e | grep ssh
如果返回结果由上图中的sshd,则说明已经安装好ssh,否则可以使用下面命令在线安装:
—sudo apt-get install ssh
2
使用ssh命令登录其他电脑:
—ssh username@ip,
会提示需要输入密码,这时候输入密码即可远程控制另一台电脑.
3
ifconfig查看ip
如果有十台电脑需要你连接,分配任务,这样做就要每次都记住相应的电脑ip和密码,不利于我们用脚本统一运行,因此第一步就是需要将需要远程控制的电脑免密登录.
4
生成密钥:
—ssh-keygen
然后一路enter,此时会在主目录下生成.ssh的文件夹
用下面命令可以进行检查核对:
—ls -a
此时说明秘钥对已经生成好了
5
将公钥通过scp拷贝到你需要连接的电脑上:
—cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
—scp ~/.ssh/id_rsa.pub username@ip:~/.ssh/id_rsa.pub_copy
6
远程连接上你需要连接作为服务器的电脑:
—touch ~/.ssh/authorized_keys
—cat ~/.ssh/id_rsa.pub_copy >> ~/.ssh/authorized_keys
7
修改权限:
—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:写得不好的地方希望大家多多指教.!
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx