在Linux运维中,自动化运维提高运维工程师的工作效率,减少人为失误。Ansible 是近年来越来越火的一款开源运维自动化工具,无客户端模式,底层通过 SSH 通信。笔者就想把它啃下来,无奈知识薄弱,只能从小处着手,积少成多慢慢来!
Linux怎么远程执行指令呢?ssh pi@192.168.31.103 "ls" 或者ssh 192.168.31.103 "ls" ,远程执行命令,需要输入密码,这个在远程是有交互提醒输入密码,会增加麻烦,也不够自动化。是否可以不用输入密码,直接远程执行命令呢?SSH秘钥!
dpkg -l | grep ssh可以查看是否安装了客户端 openssh-client 和服务器 openssh-server。如果没有可以搜索apt-cache search openssh-client、apt-cache search openssh-server是否有源,然后安装sudo apt-get install openssh-client 、sudo apt-get install openssh-server。
1、192.168.31.76本机生成密钥对。
使用ssh-keygen命令生成密钥对,私钥文件 id_rsa 和公钥文件 id_rsa.pub。
ssh-keygen -t rsa #-t表示类型选项,这里采用rsa加密算法。根据提示一步步的按enter键即可,需要设置密钥对文件夹,设置私钥口令passphrase(可不设)。执行结束以后会在 /home/当前用户 目录下生成一个 .ssh 文件夹,其中包含私钥文件 id_rsa 和公钥文件 id_rsa.pub。
2、将公钥复制到远程主机192.168.31.82中
使用ssh-copy-id命令将公钥复制到远程主机。ssh-copy-id会将公钥写到远程主机的 ~/ .ssh/authorized_key 文件中。
ssh-copy-id pi@192.168.31.82。这一条命令是需要输入密码的。
3、完成密钥对部署,测试
ssh 192.168.31.82 "ls" 。远程看用户目录下的文件;
ssh 192.168.31.82 "./ipaddress.sh"。远程执行脚本ipaddress.sh查看IP地址。
linux远程执行命令远程执行程序时,关闭终端会中断ssh连接,远程主机上程序会自动停止。 nohup + 需要运行的程序使运行的程序在切断ssh连接的时候仍然能够继续在远程主机中运行。nohup是no hang up(不挂起)。上面的命令改写成ssh 192.168.31.82 "nohup ./ipaddress.sh",ipaddress.sh脚本执行时间很短,意义不大。如果有其他一直运行的服务,比如脚本里面有循环的话,意义就很大了。在脚本后面加个&直接在后台运行。
一条命令直接远程执行,那么在脚本里面就可以很方便的控制远程主机的进程等等,利用PHP的shell_exec函数又可完成网络监控功能。
网友评论